我正在制作自己的基于角色的访问控制实施,并且需要有关关系问题的一些帮助。
我有一个用户、组和权限模型,用户/组之间和组/权限之间有一个数据透视表。我如何最有效地通过用户模型检索权限模型?
谢谢你。
编辑:
关系如下;
用户属于ToMany组 组属于多个用户
组属于多个权限 权限属于ToMany Group
根据您的
Pivot Tables
关系如下:
Group <-> User
有many-to-many
Group <-> Permission
有many-to-many
我如何最有效地通过 用户模型
由于
User
和Permission
模型没有直接关系,但是您可以通过Group
模型获得所有权限:
$user = User::with('groups.permissions')->find(1);
这将为您提供
User
模型以及所有 Group
模型和嵌套 Permission
模型,以便获得权限,您可以尝试:
// Get a collection
$permissionsOfFirstGroup = $user->groups->first()->permissions;
// Get a collection
$permissionsOfSecondGroup = $user->groups->get(1)->permissions;
要获得所有组的所有权限,您可以尝试以下操作:
$permissions = $user->groups->fetch('permissions');
这将返回一个
Illuminate\Database\Eloquent\Collection
对象(Permission
模型的集合)。
还有其他方法(使用联接),但具体取决于您的需要。
最简单的方法之一是使用这个包: rbac-laravel