我正在使用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,所以如果转到用户详细信息页面,我将看到类似的内容。
基本上,我的意思是显示用户部门列表的选项以及将部门附加到用户的选项。但是我不想一直显示该选项/列表。我只想根据角色显示它。我的意思是在fields方法中这样。请阅读以下代码中的注释。
public function fields(Request $request)
{
return [
ID::make()->sortable(),
//other fields
BelongsToMany::make("departments")//Do this only if the user role is "staff"
];
}
答案 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