首页 文章

Laravel Nova:BelongsToMany . 根据条件显示详细信息页面上的列表(来自db)

提问于
浏览
0

我正在使用Laravel Nova开发Web应用程序 . Nova是Laravel的一个新的CMS系统 . 我现在遇到多对多关系和呈现数据的问题 . 请看下面我的场景 .

我有一个包含以下数据的用户表

users - id, name, email, role

然后我有一个department表,其中包含以下数据 .

departments - id, name, code

他们与像这样的数据透视表有很多对多的关系 .

departments_users - id, department_id, users_id

在User资源中,如果我在fields方法中添加了这个

public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),

            //other fields
            BelongsToMany::make("Departments")
        ];
    }

因为我在User资源中添加了BelongsToMany,如果我转到用户详细信息页面,我会看到类似这样的内容 .

对不起狡猾的截图 . 基本上我的意思是显示用户部门列表的选项以及将部门附加到用户的选项 . 但我不想一直显示该选项/列表 . 我只想根据角色显示它 . 我在fields方法中的意思是这样的 . 请阅读以下代码中的注释 .

public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            //other fields
            BelongsToMany::make("departments")//Do this only if the user role is "staff"
        ];
    }

我希望你得到我的意思 . 我该怎么做?

1 回答

  • 0

    使用laravel nova授权很容易实现 .

    您可以将 ->canSee() 添加到 BelongsToMany 字段 .

    您没有指定哪个用户必须具有角色“stuff” . 登录或编辑 .

    如果记录,那么只需:

    BelongsToMany::make("departments")
        ->canSee(function ($request) {
            return $request->user()->role == 'stuff';
        }),
    

    如果编辑用户:

    BelongsToMany::make("departments")
        ->canSee(function ($request) {
            return $this->role == 'stuff';
        }),
    

    有关更多信息,请查看Field Authorization docs

相关问题