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

svujldwt  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(433)

我希望你明白我的观点,呵呵。以下是我想要达到的目标。
我有一个与角色和权限有关系的用户模型。代码如下:

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() {

    }

    ....

因为每个用户都有各自的权限和从角色继承的权限。我想根据用户的角色获取用户权限列表。我怎样才能做到这一点?这是我的table:

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.

我希望任何人都能帮助我。提前谢谢!:)

wmomyfyw

wmomyfyw1#

你可以用 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");

相关问题