所以我试图隐藏 Laravel Nova 资源中的按钮。但我不知道我可以在代码中添加什么。
那些按钮:
我找到了一个解决方案,首先通过 artisan 命令创建一个策略: php artisan make:policy ModelNamePolicy --model=ModelName
然后你会在 app/Policies/ModelNamePolicy.php 中得到一个文件
public function view(User $user, InstructorOverview $instructorOverview) {
return false;
}
您可以在函数视图中返回 false,创建、更新、删除、恢复、强制删除。
如果您想对镜头执行此操作,可以通过覆盖与镜头相关的模型中的方法serializeForIndex来完成,因此例如在镜头本身中我们有一个uriKey方法
// In your lens file - in my case BuildingStatsLens
/**
* Get the URI key for the lens.
*
* @return string
*/
public function uriKey()
{
return 'building-stats-lens';
}
在模型中,在我的场景构建模型中,我们将拥有此代码
// In your model - in my case Building
/**
* Prepare the resource for JSON serialization.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Support\Collection $fields
* @return array
*/
public function serializeForIndex(NovaRequest $request, $fields = null)
{
$serialized = parent::serializeForIndex($request, $fields);
if ($request->lens && $request->lens == 'building-stats-lens') {
// If a lens is being viewed
$serialized = array_merge($serialized, [
'authorizedToView' => false,
'authorizedToUpdate' => false,
'authorizedToDelete' => false,
'authorizedToRestore' => false,
'authorizedToForceDelete' => false,
'authorizedToReplicate' => false,
]);
}
return $serialized;
}
这样查看、编辑、删除和复制选项将被隐藏。