我正在制作自己的基于角色的访问控制实施,并需要一些关于关系问题的帮助。
我有用户,组和权限模型,用户/组之间以及组/权限之间有一个数据透视表。如何通过用户模型最有效地检索权限模型?
谢谢。
编辑:
关系如下;
用户belongsToMany Group Group belongsToMany User
组belongsToMany权限 权限属于ToMany Group
答案 0 :(得分:2)
根据您的Pivot Tables
关系如下:
Group <-> User
有many-to-many
Group <-> Permission
有many-to-many
如何通过最有效地检索Permission模型 用户模型
由于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
模型的集合)。
还有其他方法(使用联接),但取决于您的需要。