0

我正在使用 Laravel Nova 开发一个 Web 应用程序。Nova 是一个全新的 Laravel CMS 系统。我现在在多对多关系和呈现数据方面遇到了麻烦。

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

users - id, name, email, role

然后我有一个包含以下数据的部门表。

departments - id, name, code

它们与这样的数据透视表具有多对多的关系。

departments_users - id, department_id, users_id

如果我在字段方法中添加了这个,在用户资源中

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

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

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

在此处输入图像描述

基本上我的意思是显示用户部门列表的选项和将部门附加到用户的选项。但我不想一直显示该选项/列表。我只想根据角色显示它。我的意思是在字段方法中是这样的。请阅读以下代码中的注释。

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

1 回答 1

3

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

您可以添加->canSee()BelongsToMany字段。

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

如果已登录,则只需:

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

如果已编辑用户:

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

有关更多信息,请查看字段授权文档

于 2018-09-16T19:03:46.643 回答