2

我有与 Post 模型有 HasMany 关系的 User 模型。当我在 Nova 的用户资源中包含 HasMany 的字段时,我看到有Create postbutton。如何删除/隐藏该按钮?

4

5 回答 5

2

你需要在这里做两件事。

  1. 在您的帖子资源中

    公共静态函数授权(){返回真;}

  2. 现在为 Post 和return true除 create、for createreturn false和 in之外的所有方法创建策略AuthServiceProvider.php

protected $policies = [
    Post::class => PostPolicy::class,
];

你完成了。

于 2019-07-01T13:05:38.227 回答
2

您可以使用Policies.

根据文档:

如果策略存在但缺少特定操作的方法,则不允许用户执行该操作。因此,如果您定义了策略,请不要忘记定义其所有相关的授权方法。

因此,在您的情况下,如果您想完全隐藏该按钮,只需为您的资源(PostPolicy)创建一个策略并且不要实现该create方法。

于 2019-04-08T04:42:27.753 回答
2

这个问题在laravel nova 官方文档中得到了解答

就我而言,我有用户模型和订单模型,我添加了用户Hasmany订单

public function addOrder()
{
    return false;
}

在用户政策上现在创建角色按钮在用户详细信息页面上消失了 这是用户详细信息页面的屏幕截图

于 2020-05-17T15:17:19.523 回答
1

如果您像我一样,您最不想做的事情是通过设置策略来设置策略,阻止创建 HasMany 规则引用的子资源。原因是,将此addX()策略设置false为“有”HasMany不仅会阻止从资源详细信息视图创建子资源,还会在从其页面视图创建子资源时产生权限错误,特别是政策禁止使用对“父”或“有”的引用来创建资源。当您考虑许可声明的广泛性时addClassName(),这实际上并不令人惊讶。

因此,我的解决方案最终不得不成为丑陋的 CSS。为什么这是对创建按钮进行页面相关隐藏的唯一方法。这应该是视图文件HasMany::make("")->canCreate(false)中的声明。Nova/*.php

无论如何,这是CSS,希望它可以帮助某人。

div[dusk="parent-class-detail-component"] div[dusk="has-many-child-class-index-component"] a[dusk='create-button'] {
  display: none;
}
于 2021-08-04T05:07:43.113 回答
0

如果有人仍在寻找解决方案,您可以在策略中授权附加/分离资源:

https://nova.laravel.com/docs/2.0/resources/authorization.html#authorizing-attaching-detaching

因此,在这种情况下,您可以UserPolicy向其中添加一个函数:

attachPost(User $user, User $model, Post $post)
{
    return false;
}

$user变量是登录的用户,变量$model是查看的用户页面。

于 2019-10-28T13:23:10.457 回答