[英]Laravel Nova - How to hide 'Create' button from HasMany field?
我有 User 模型,它与 Post 模型有 HasMany 关系。 当我在 Nova 的用户资源中包含 HasMany 的字段时,我看到有Create post
button 。 如何删除/隐藏该按钮?
您可以通过Policies
实现这一点。
根据文档:
如果策略存在但缺少特定操作的方法,则将不允许用户执行该操作。 所以,如果你已经定义了一个策略,不要忘记定义它所有相关的授权方法。
因此,在您的情况下,如果您想完全隐藏按钮,只需为您的资源( PostPolicy
)创建一个策略,并且不要实现create
方法。
你需要在这里做两件事。
在您的帖子资源中
公共静态函数authorizable(){返回真; }
现在为 Post 创建策略并为除 create 之外的所有方法return true
,对于 create return false
并在AuthServiceProvider.php
放
protected $policies = [
Post::class => PostPolicy::class,
];
你已经完成了。
这个问题在laravel nova 官方文档中有回答
就我而言,我有用户模型和订单模型,我添加了用户Hasmany订单
public function addOrder()
{
return false;
}
如果有人仍在寻找解决方案,您可以在您的策略中授权附加/分离资源:
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
变量是查看的用户页面。
如果你像我一样,你最不想做的事情就是通过设置策略来设置阻止创建 HasMany 规则引用的子资源的策略。 原因是在HasMany
的“Has”端将此addX()
策略设置为false
不仅会阻止从资源详细信息视图创建子资源,还会在从其创建子资源时产生权限错误页面视图,特别是策略禁止创建引用“父”或“具有”的资源。 当您考虑addClassName()
的权限声明有多广泛时,实际上并不奇怪。
因此,我的解决方案最终不得不使用丑陋的 CSS。 只是为什么这是对创建按钮进行页面相关隐藏的唯一方法。 这应该是Nova/*.php
视图文件中的HasMany::make("")->canCreate(false)
声明。
无论如何,这是 CSS,希望它可以帮助某人。
div[dusk="parent-class-detail-component"] div[dusk="has-many-child-class-index-component"] a[dusk='create-button'] {
display: none;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.