Laravel красноречивые отношения между двумя отношениями - PullRequest
0 голосов
/ 21 мая 2018

Надеюсь, вы поняли мою точку зрения на мой титул хе-хе.Вот чего я хочу достичь.

У меня есть Пользователь модель, которая имеет отношения от Роли и Разрешения .Вот код:

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.

Я надеюсь, что кто-нибудь может мне помочь.Заранее спасибо!:)

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете использовать отношение 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...