繁体   English   中英

Laravel Nova - 如何从 HasMany 字段中隐藏“创建”按钮?

[英]Laravel Nova - How to hide 'Create' button from HasMany field?

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

您可以通过Policies实现这一点。

根据文档:

如果策略存在但缺少特定操作的方法,则将不允许用户执行该操作。 所以,如果你已经定义了一个策略,不要忘记定义它所有相关的授权方法。

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

你需要在这里做两件事。

  1. 在您的帖子资源中

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

  2. 现在为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM