我希望你对我的头衔嗤之以鼻。这就是我想要实现的目标。
我的用户模型与角色和权限有关系。 这是代码:
class User extends Model {
....
public function roles() {
return $this->belongsToMany('App\Models\Roles');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permissions');
}
}
这项工作很好,但我希望有另一个这样的功能
....
public function permissions_by_roles() {
}
....
因为每个用户都具有从角色继承的个人权限和权限。我想根据用户的角色获取用户权限列表。我怎样才能做到这一点?这是我的表格:
users roles permissions role_user - contains all roles of each user(ex. admin, super admin, user) permission_user - contains all permissions of each user (ex. edit, delete) permission_role - contains all permissions for each roles.
我希望有人能帮助我。先感谢您! :)
答案 0 :(得分:2)
您可以在必要时将hasManyThrough
关系与合并结合使用:
class User extends Model {
....
public function roles() {
return $this->belongsToMany('App\Models\Roles');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permissions');
}
public function inheritedPermissions() {
return $this->hasManyThrough('App\Models\Permissions', 'App\Models\Roles');
}
}
然后,如果您想要所有用户权限,您可以这样做:
$user = User::with(["permissions", "inheritedPermissions"])->where("id", $id)->first();
所有权限均为:
$allPermissions = $user->permissions->merge($user->inheritedPermissions)->unique("id");