Laravel两种关系之间雄辩的关系

时间:2018-05-21 07:38:41

标签: php mysql laravel eloquent

我希望你对我的头衔嗤之以鼻。这就是我想要实现的目标。

我的用户模型与角色权限有关系。 这是代码:

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 :(得分:2)

您可以在必要时将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");