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

Laravel Nova: BelongsToMany. Displaying list on details page based on a condition (from db)

我正在使用 Laravel Nova 开发 Web 应用程序。 Nova 对于 Laravel 来说是一个相当新的 CMS 系统。我现在在处理多对多关系和呈现数据时遇到了问题。

我有一个用户 table 具有以下数据

users - id, name, email, role

然后我有一个部门 table 具有以下数据。

departments - id, name, code

他们与这样的枢轴 table 具有多对多关系。

departments_users - id, department_id, users_id

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

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

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

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

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

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

使用 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