繁体   English   中英

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

[英]Laravel eloquent relationship between two relationships

希望您能理解我的头衔。 这是我要实现的目标。

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

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.

我希望有人能帮助我。 先感谢您! :)

您可以将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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM