Laravel Nova:属于很多。根据条件在详细信息页面上显示列表(来自数据库)

时间:2018-09-13 13:23:24

标签: laravel laravel-nova

我正在使用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")
        ];
    }

因为我在用户资源中添加了BelongsToMany,所以如果转到用户详细信息页面,我将看到类似的内容。

enter image description here

基本上,我的意思是显示用户部门列表的选项以及将部门附加到用户的选项。但是我不想一直显示该选项/列表。我只想根据角色显示它。我的意思是在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 :(得分: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