Как получить разрешения от пользователя, который имеет несколько ролей в Laravel? - PullRequest
0 голосов
/ 21 июня 2019

Я создаю новое приложение 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);
    }

Я ожидаю получитьвсе разрешения для одного пользователя, прошедшего через желаемые роли.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Поскольку у одного пользователя может быть много ролей, а у одной роли может быть много прав, вам нужно будет пройтись по каждой роли

//Retrieving rights associated with the user
public function retrieveRightsAssociatedWithUser($user){
    $rightsAssociatedWithUser = [];
    foreach($user->roles as $role){
        $rightsAssociatedWithUser[] = $role->rights; 
    }
    return $rightsAssociatedWithUser;
}
0 голосов
/ 21 июня 2019

Вы можете добавить права метода () к модели пользователя:

public function rights()
    {
        return $this->hasManyThrough(Role::class, Right::class);
    }

, а затем использовать $ user-> rights ();


Дополнительная информация: Laravel has 'Мысль для многих.

Вы можете установить 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]);
    }
}
...