我为我的用户设置了权限/角色。 这是通过6个表
用户类具有以下功能:
public function permissions(){
return $this->belongsToMany(Permission::class);
}
public function roles(){
return $this->belongsToMany(Role::class);
}
Permission Class具有以下功能
public function roles() {
return $this->belongsToMany(Role::class);
}
public function users() {
return $this->hasMany(User::class);
}
最后,Role具有以下功能:
public function permissions() {
return $this->belongsToMany(Permission::class);
}
public function users() {
return $this->belongsToMany(User::class);
}
所以现在我想请求列出了所有权限并列出所有角色的用户,所以我创建了:
$u = \Auth::user();
return User::with('roles.permissions')->with('permissions')->find($u->id);
返回了像
这样的东西{
id: 53,
name: "name",
username: "username",
avatar: "",
email: "email",
created_at: "2016-02-20 14:36:54",
updated_at: "2016-02-20 14:36:54",
roles: [{
id: 1,
name: "edit_forum",
label: "Edit Forum",
created_at: "2016-02-20 12:33:50",
updated_at: "2016-02-20 12:33:50",
permissions: [{
id: 2,
name: "Testing stuff",
label: null,
created_at: "2016-02-20 16:50:02",
updated_at: "2016-02-20 16:50:02"
}]
}],
permissions: [{
id: 1,
name: "Testing",
label: null,
created_at: "2016-02-20 16:50:02",
updated_at: "2016-02-20 16:50:02"
}]
}
所以你可以看到,它的角色权限是分开的,现在我尝试了两件事,但我似乎无法弄清楚如何制作这些功能:
第一: 获取用户自身的所有权限以及1个数组中的权限。
第二: 通过单个范围/功能
获取此信息答案 0 :(得分:2)
Permission
类具有以下功能:
public function users() {
return $this->hasMany(User::class);
}
这应该是many-to-many
关系,而不是one-to-many
,所以你写这样的方法:
public function users() {
return $this->belongsToMany(User::class);
}
因此,permission_user
数据透视表将用于维护关系,并且对于您的代码,您可以执行以下操作:
$u = \Auth::user(); // get the authenticated User
return $u->load('roles.permissions'); // Load the roles and permissions of loaded User
因此,无需单独加载权限和角色进行更多查询。你可以使用这样的东西:
foreach($u->roles as $role) {
// $role->title; // for example
foreach($role->permissions as $permission) {
// $permission->title; // for example
}
}
请注意,$u->roles
会在每个$role
中返回一个集合(当您致电$role->permissions
时)permissions
也将是一个集合。
注意:您可以关注我的this article以获得更多想法。