如何从 Laravel 中具有多个角色的用户获取权限?
How to get permissions from a user that has multiple roles in Laravel?
我正在构建一个新的 laravel 应用程序,其中一个用户可以拥有多个角色,并且这些角色具有多个权限 (权限)。现在我想获得某个用户的所有权限。
我正在使用 Laravel 5.8 和 Eloquent。我可以从用户那里获得角色和角色的权限,但不能从用户那里获得权限。
dd(Auth::user()->roles->rights);
模范用户:
public function roles()
{
return $this->belongsToMany(Role::class);
}
模特角色:
public function users()
{
return $this->belongsToMany(User::class);
}
public function rights()
{
return $this->belongsToMany(Right::class);
}
模特权
public function roles()
{
return $this->belongsToMany(Role::class);
}
我希望通过他拥有的角色获得一个用户过去的所有权限。
由于一个用户可以有多个角色,一个角色可以有多个权限,
您将需要遍历每个角色
//Retrieving rights associated with the user
public function retrieveRightsAssociatedWithUser($user){
$rightsAssociatedWithUser = [];
foreach($user->roles as $role){
$rightsAssociatedWithUser[] = $role->rights;
}
return $rightsAssociatedWithUser;
}
您可以将方法 rights() 添加到用户模型:
public function rights()
{
return $this->hasManyThrough(Role::class, Right::class);
}
然后使用 $user->rights();
附加信息:
Laravel 没有想过 manyToMany。
你可以安装pakage
composer require staudenmeir/eloquent-has-many-deep
并使用这个:
class User extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function rights()
{
return $this->hasManyDeep(Right::class, ['role_user', Role::class]);
}
}
我正在构建一个新的 laravel 应用程序,其中一个用户可以拥有多个角色,并且这些角色具有多个权限 (权限)。现在我想获得某个用户的所有权限。
我正在使用 Laravel 5.8 和 Eloquent。我可以从用户那里获得角色和角色的权限,但不能从用户那里获得权限。
dd(Auth::user()->roles->rights);
模范用户:
public function roles()
{
return $this->belongsToMany(Role::class);
}
模特角色:
public function users()
{
return $this->belongsToMany(User::class);
}
public function rights()
{
return $this->belongsToMany(Right::class);
}
模特权
public function roles()
{
return $this->belongsToMany(Role::class);
}
我希望通过他拥有的角色获得一个用户过去的所有权限。
由于一个用户可以有多个角色,一个角色可以有多个权限, 您将需要遍历每个角色
//Retrieving rights associated with the user
public function retrieveRightsAssociatedWithUser($user){
$rightsAssociatedWithUser = [];
foreach($user->roles as $role){
$rightsAssociatedWithUser[] = $role->rights;
}
return $rightsAssociatedWithUser;
}
您可以将方法 rights() 添加到用户模型:
public function rights()
{
return $this->hasManyThrough(Role::class, Right::class);
}
然后使用 $user->rights();
附加信息: Laravel 没有想过 manyToMany。
你可以安装pakage
composer require staudenmeir/eloquent-has-many-deep
并使用这个:
class User extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function rights()
{
return $this->hasManyDeep(Right::class, ['role_user', Role::class]);
}
}