laravel nova隐藏索引页面上的编辑按钮

时间:2019-06-19 07:42:33

标签: php laravel laravel-5.8 laravel-nova laravel-authorization

如何在nova索引页面上禁用编辑/删除按钮并仍然允许详细页面,如果我要创建一个策略,它将在所有位置禁用该操作,我想允许在详细页面上进行编辑和删除,但只想从索引中删除这些按钮,

做类似

 public function update(User $user, Customer $customer)
    {
        if ( request()->route()->getName('route-name') ) {
            return false;
        }
    }

是正确的方法还是有更好的方法?

7 个答案:

答案 0 :(得分:2)

您可以根据需要定义自定义操作并设置操作可见性。

  1. 创建新的操作类
# To generate the action class
php artisan nova:action DeleteUserData --destructive
  1. 设置动作可见性:
/**
 * 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();
}

这也适用于 authorizedToViewauthorizedToDelete

答案 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部分:

enter image description here

作为参考,我正在使用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;
}