我有与 Post 模型有 HasMany 关系的 User 模型。当我在 Nova 的用户资源中包含 HasMany 的字段时,我看到有Create post
button。如何删除/隐藏该按钮?
5 回答
你需要在这里做两件事。
在您的帖子资源中
公共静态函数授权(){返回真;}
现在为 Post 和
return true
除 create、for createreturn false
和 in之外的所有方法创建策略AuthServiceProvider.php
放
protected $policies = [
Post::class => PostPolicy::class,
];
你完成了。
您可以使用Policies
.
根据文档:
如果策略存在但缺少特定操作的方法,则不允许用户执行该操作。因此,如果您定义了策略,请不要忘记定义其所有相关的授权方法。
因此,在您的情况下,如果您想完全隐藏该按钮,只需为您的资源(PostPolicy
)创建一个策略并且不要实现该create
方法。
就我而言,我有用户模型和订单模型,我添加了用户Hasmany订单
public function addOrder()
{
return false;
}
在用户政策上现在创建角色按钮在用户详细信息页面上消失了 这是用户详细信息页面的屏幕截图
如果您像我一样,您最不想做的事情是通过设置策略来设置策略,阻止创建 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;
}
如果有人仍在寻找解决方案,您可以在策略中授权附加/分离资源:
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
是查看的用户页面。