我正在构建一个新的laravel应用程序,其中用户可以具有多个角色,并且这些角色具有多个权限(权限)。现在,我想从某个用户那里获得所有权限。
我正在使用Laravel 5.8和Eloquent。我可以从用户那里获得角色,从角色那里获得权限,但不能从用户那里获得权限。
Date Actual Forecast #Data goes back up to 3 years
19/06/19 121 138
18/06/19 110 116
17/06/19 129 124
模型用户:
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);
}
我希望通过一名用户来获得一个用户的所有权限。
答案 0 :(得分:1)
由于一个用户可以具有多个角色,而一个角色可以具有多个权限, 您将需要遍历每个角色
//Retrieving rights associated with the user
public function retrieveRightsAssociatedWithUser($user){
$rightsAssociatedWithUser = [];
foreach($user->roles as $role){
$rightsAssociatedWithUser[] = $role->rights;
}
return $rightsAssociatedWithUser;
}
答案 1 :(得分:0)
您可以将方法right()添加到用户模型:
public function rights()
{
return $this->hasManyThrough(Role::class, Right::class);
}
,然后使用$ user-> rights();
其他信息: Laravel并没有想太多。
您可以安装包装
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]);
}
}