我正在制作自己的基于角色的访问控制实现,并需要一些关于关系问题的帮助 .
我有一个用户,组和权限模型,用户/组之间和组/权限之间有一个数据透视表 . 如何通过用户模型最有效地检索权限模型?
谢谢 .
编辑:
关系如下;
用户所属的ToMany Group Group属于ToMany User
Group belongsToMany权限权限属于ToMany Group
根据你的 Pivot Tables 关系如下:
Pivot Tables
Group <-> User 有 many-to-many
Group <-> User
many-to-many
Group <-> Permission 有 many-to-many
Group <-> Permission
我如何通过用户模型最有效地检索权限模型
由于 User 和 Permission 模型之间没有直接关系,但您可以通过 Group 模型获得所有权限:
User
Permission
Group
$user = User::with('groups.permissions')->find(1);
这将为您提供包含所有 Group 模型和嵌套 Permission 模型的 User 模型,以便获得您可能尝试的权限:
// 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 模型的集合) .
Illuminate\Database\Eloquent\Collection
还有其他方法(使用连接),但取决于您的需要如何执行 .
1 回答
根据你的
Pivot Tables
关系如下:Group <-> User
有many-to-many
Group <-> Permission
有many-to-many
由于
User
和Permission
模型之间没有直接关系,但您可以通过Group
模型获得所有权限:这将为您提供包含所有
Group
模型和嵌套Permission
模型的User
模型,以便获得您可能尝试的权限:要获得所有组的所有权限,您可以尝试这样做:
这将返回一个
Illuminate\Database\Eloquent\Collection
对象(Permission
模型的集合) .还有其他方法(使用连接),但取决于您的需要如何执行 .