【问题标题】:Laravel Nova - How to hide 'Create' button from HasMany field?Laravel Nova - 如何从 HasMany 字段中隐藏“创建”按钮?
【发布时间】:2019-08-28 13:28:36
【问题描述】:

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

【问题讨论】:

    标签: php laravel-5 eloquent laravel-nova eloquent-relationship


    【解决方案1】:

    如果您像我一样,您最不想做的事情是通过设置策略来设置阻止创建 HasMany 规则引用的子资源的策略。原因是在HasMany 的“有”一侧将这个addX() 策略设置为false 不仅会阻止从资源详细信息视图创建子资源,还会在创建子资源时产生权限错误-resource 从其页面视图,特别是该策略禁止创建引用“父”或“Has”的资源。当您想到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;
    }
    

    【讨论】:

      【解决方案2】:

      这个问题在laravel nova official documentation得到解答

      就我而言,我有 user 模型和 order 模型,user Hasmany order 我添加了

      public function addOrder()
      {
          return false;
      }
      

      关于用户政策现在创建角色按钮在用户详细信息页面上消失了 this is a screenshot of user detail page

      【讨论】:

        【解决方案3】:

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

        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 变量是查看的用户页面。

        【讨论】:

          【解决方案4】:

          你需要做两件事。

          1. 在您的帖子资源中

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

          2. 现在为除创建之外的所有方法创建 Post 和 return true 策略,创建 return falseAuthServiceProvider.php

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

          你就完成了。

          【讨论】:

            【解决方案5】:

            您可以通过 Policies 实现此目的。

            根据文档:

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

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

            【讨论】:

            • 这个问题是我希望用户能够输入条目,而不是来自对这些条目具有 HasMany 规则的项目...
            猜你喜欢
            • 2020-07-24
            • 1970-01-01
            • 2019-03-01
            • 1970-01-01
            • 2019-07-20
            • 1970-01-01
            • 2019-11-01
            • 2019-05-19
            • 2019-07-28
            相关资源
            最近更新 更多