Laravel Nova如何在索引页面隐藏编辑按钮

3
如何在nova索引页上禁用编辑/删除按钮,同时仍允许在详细页面上进行操作?如果我创建一个策略来禁用所有操作,我希望在详细页面中允许编辑和删除,但只想从索引页中删除这些按钮,应该如何处理?
可以尝试以下方法:
 public function update(User $user, Customer $customer)
    {
        if ( request()->route()->getName('route-name') ) {
            return false;
        }
    }

"最初的回答":这种方式正确吗?还有更好的方法吗?
7个回答

7

我知道这个帖子有点老了,但您也可以在Nova资源中覆盖authorizedToUpdate方法,具体做法如下:

public function authorizedToUpdate(Request $request): bool
{
    return "nova-api/{resource}" != $request->route()->uri();
}

这同样适用于authorizedToViewauthorizedToDelete

你可以直接添加:return false; - undefined
谢谢,这对我来说只在首页有效。 - undefined

4

我有一份潜在客户资源,需要隐藏其编辑按钮。我按照以下方法在我的CSS中实现 - 在此处查看如何为Nova添加您自己的CSS

使用我的潜在客户资源的slug,我可以通过slug和资源部分引用dusk属性:

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

作为参考,我正在使用按钮字段包将自定义按钮添加到重定向到自己的自定义工具来管理此资源。

我与提供的任何链接都没有关联。


3
如果您想在索引页面上禁用任何行按钮,请为资源创建一个策略,并在相应的函数(在我的情况下是update())中返回false,所有其他函数都返回true并将策略添加到AuthServiceProvider.php中。
protected $policies = [
    Post::class => PostPolicy::class,
];

在资源类中
public static function authorizable()
{
    return true;
}

那将禁用那个按钮。

它将隐藏按钮,但也会禁用任何自定义操作,在这种情况下是在“编辑”授权策略下。那不是用户所要求的。用户要求保留策略,仅隐藏按钮。 - undefined
我已经检查了这个问题。你应该检查一下这个问题。他想在主页上移除按钮,但不禁用其他操作。你的答案行不通,因为它会在任何地方都禁用“编辑”,甚至在详细视图中,同时允许其他所有操作。 - undefined
4
@Max 我是提问者,所以对于要求非常清楚。我希望你的回答对他人和你自己都有帮助。在发布这个问题之前,我的回答就已经符合了我想要的要求。 - undefined
没有索引方法或显示方法。即使您的答案也没有提到索引或显示方法。 - undefined
@max 我觉得在 Laravel 工作的人不需要在这里使用 Policy 类,他们会通过文档来了解策略的详细信息,如果他们知道的话,这个答案应该足够让他们理解如何与 Nova 资源一起使用。 - undefined
显示剩余2条评论

3

我想做类似的事情。我不想让编辑按钮出现在首页,但是我希望动作运行(并更新资源)。所以我使用了下面的代码:

use Laravel\Nova\Http\Requests\ActionRequest;

...

public function authorizedToUpdate(Request $request)
{
    return $request instanceof ActionRequest;
}

谢谢,这对我在索引和详细页面上都有效,这就是我一直在寻找的解决方案。 - undefined

2
你可以定义自定义操作,并根据需要设置操作的可见性。
  1. 创建新的操作类:

注:Original Answer翻译成“最初的回答”。
# To generate the action class
php artisan nova:action DeleteUserData --destructive

2. 设置操作可见性:
/**
 * 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;

原始答案: Action Visibility


操作的可见性决定了谁可以访问该操作。在Nova中,有三个选项:公共、私有和隐藏。

公共操作是所有人都可以访问的默认选项。私有操作只能由授权用户访问。隐藏操作不会在导航菜单中显示,但仍然可以通过URI直接访问。


谢谢您的回答,但是我希望能够设置一些属性并完成它。 - undefined
1
对于action项没有任何规定,但你可以为fields这样做 :) - undefined
好的,谢谢你指出这个问题。在Nova 2.0中也没有这样的选项,你是指的只有1.0版本吗? - undefined
它也适用于2.0版本。https://nova.laravel.com/docs/2.0/actions/defining-actions.html#action-visibility - undefined
我觉得你对我的上一个问题理解错了,我也是在问2.0版本中是否可以禁用/启用编辑/删除的可见性? - undefined
显示剩余5条评论

2
有一个使用CSS的替代方案。
    div[dusk$="-index-component"] table td.td-fit {
     display: none !important;
    }

我想隐藏一个查看按钮,我该怎么做? - undefined

1
只有 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-

其他涉及授权和策略的解决方案不仅会隐藏按钮,还会完全禁用该操作,因此如果需要使用自定义操作,则无法运行它。


这正是我在寻找的,但我尝试将“删除”更改为“查看”,但它不起作用?我如何仅移除一个查看按钮而不是删除按钮?谢谢 - undefined
@ChristopherKikoti 这取决于您使用的模型,您需要替换users-index-component,尝试检查元素以查看其名称。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接