如何从在Laravel中具有多个角色的用户获取权限?

时间:2019-06-21 10:04:31

标签: laravel eloquent many-to-many laravel-5.8

我正在构建一个新的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);
    }

我希望通过一名用户来获得一个用户的所有权限。

2 个答案:

答案 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]);
    }
}