从 2 个深 many-to-many 关系中得到一个 collection 结果
Get one collection result from 2 deep many-to-many relationship
标题有点乱。角色是来自用户的 many-to-many 关系,而权限是角色的 many-to-many 关系。但是我想获得用户拥有的角色的所有权限。现在我有了这样做的代码,但我想也许有更好的方法?
public function hasPermissions(array $permissions = []): bool
{
$this->loadMissing('roles');
foreach ($this->roles as $role) {
foreach ($role->permissions as $permission) {
if (count($this->getFilteredArray($permissions,
$permission['permission'])) > 0) {
return true;
}
dd('hier 2');
}
}
return false;
}
private function getFilteredArray($arrayToFilter, $valueToCheck): array
{
return array_filter($arrayToFilter, function ($value) use ($valueToCheck) {
return $valueToCheck === $value;
});
}
我在这里做的是:我 for-loop 对用户的角色。然后获取角色的权限,for-loop过权限,然后查看用户是否有权限*。如果有,则 return 为真。否则,转到函数 getFilteredArray 以过滤传递给此方法的权限数组。如果该结果大于 0,则 return 为真,否则为假。但我认为对此有更好的解决方案。
这段代码,检查用户是否有角色,循环角色集合并收集与他们相关的权限。 Return权限集合,否则为空
$roles = auth()->user()->roles()->exists() ? auth()->user()->roles()->pluck('id') : null;
if($roles) {
$collection = Role::whereIn('id', $roles)->get();
$collectPermission = collect();
foreach($collection as $role) {
if($role->permissions()->exists()) {
$role->permissions()->filter(function ($permission) use ($collectPermission) {
$collectPermission->push($permission);
});
}
}
return $collectPermission;
}
return null;
标题有点乱。角色是来自用户的 many-to-many 关系,而权限是角色的 many-to-many 关系。但是我想获得用户拥有的角色的所有权限。现在我有了这样做的代码,但我想也许有更好的方法?
public function hasPermissions(array $permissions = []): bool
{
$this->loadMissing('roles');
foreach ($this->roles as $role) {
foreach ($role->permissions as $permission) {
if (count($this->getFilteredArray($permissions,
$permission['permission'])) > 0) {
return true;
}
dd('hier 2');
}
}
return false;
}
private function getFilteredArray($arrayToFilter, $valueToCheck): array
{
return array_filter($arrayToFilter, function ($value) use ($valueToCheck) {
return $valueToCheck === $value;
});
}
我在这里做的是:我 for-loop 对用户的角色。然后获取角色的权限,for-loop过权限,然后查看用户是否有权限*。如果有,则 return 为真。否则,转到函数 getFilteredArray 以过滤传递给此方法的权限数组。如果该结果大于 0,则 return 为真,否则为假。但我认为对此有更好的解决方案。
这段代码,检查用户是否有角色,循环角色集合并收集与他们相关的权限。 Return权限集合,否则为空
$roles = auth()->user()->roles()->exists() ? auth()->user()->roles()->pluck('id') : null;
if($roles) {
$collection = Role::whereIn('id', $roles)->get();
$collectPermission = collect();
foreach($collection as $role) {
if($role->permissions()->exists()) {
$role->permissions()->filter(function ($permission) use ($collectPermission) {
$collectPermission->push($permission);
});
}
}
return $collectPermission;
}
return null;