如何在nova索引页面上禁用编辑/删除按钮并仍然允许详细页面,如果我要创建一个策略,它将在所有位置禁用该操作,我想允许在详细页面上进行编辑和删除,但只想从索引中删除这些按钮,
做类似
public function update(User $user, Customer $customer)
{
if ( request()->route()->getName('route-name') ) {
return false;
}
}
是正确的方法还是有更好的方法?
答案 0 :(得分:2)
您可以根据需要定义自定义操作并设置操作可见性。
# To generate the action class
php artisan nova:action DeleteUserData --destructive
/**
* Indicates if this action is only available on the resource index view.
*
* @var bool
*/
public $onlyOnIndex = false;
/**
* Indicates if this action is only available on the resource detail view.
*
* @var bool
*/
public $onlyOnDetail = true;
Src:https://nova.laravel.com/docs/1.0/actions/defining-actions.html#action-visibility
答案 1 :(得分:1)
如果要禁用索引页上的任何行按钮,请为资源创建一个策略,并在我的情况下update()
的相应函数上返回false
所有其他返回true并在AuthServiceProvider.php上添加策略
protected $policies = [
Post::class => PostPolicy::class,
];
和在资源类中
public static function authorizable()
{
return true;
}
将禁用该按钮。
答案 2 :(得分:1)
我知道这个线程有点旧,但您也可以像这样从 nova 资源中覆盖 authorizedToUpdate
方法:
public function authorizedToUpdate(Request $request): bool
{
return "nova-api/{resource}" != $request->route()->uri();
}
这也适用于 authorizedToView
和 authorizedToDelete
。
答案 3 :(得分:0)
还有一种仅使用CSS的方法。
div[dusk$="-index-component"] table td.td-fit {
display: none !important;
}
答案 4 :(得分:0)
我有潜在客户资源,我需要隐藏其上的编辑按钮。我在CSS中做了以下操作-有关如何add your own CSS to Nova的信息,请参见此处。
使用“潜在客户”资源的子弹,我可以通过“子弹和资源”部分引用黄昏属性:
div[dusk="leads-index-component"] table td.td-fit span:last-of-type {
display: none !important;
}
因此,您要更改的部分是leads-index-component
部分,成为{your-resource-slug}-index-component
此外,如果要同时隐藏视图和编辑图标,只需删除:last-of-type
部分:
作为参考,我正在使用Button Field package添加自定义按钮以重定向到我自己的用于管理该资源的自定义工具。
我与所提供的任何链接无关。
答案 5 :(得分:0)
似乎仅存在CSS解决方案,例如:
/* Details page */
div[dusk="users-detail-component"] button[dusk="open-delete-modal-button"],
/* Index page next to each row */
div[dusk="users-index-component"] button[dusk$="-delete-button"],
/* Index page after checking boxes */
div[dusk="users-index-component"] div[dusk="delete-menu"] {
display: none !important;
}
输入您的组件名称,在这种情况下为users-
。
涉及授权和策略的其他解决方案不仅会隐藏按钮,还会完全禁用该操作,因此,如果需要,您将无法通过自定义操作来运行它。
答案 6 :(得分:0)
我想做类似的事情。我不希望编辑按钮出现在索引页面上,但我希望操作能够运行(并更新资源)。所以我使用了下面的代码:
use Laravel\Nova\Http\Requests\ActionRequest;
...
public function authorizedToUpdate(Request $request)
{
return $request instanceof ActionRequest;
}