我有6张桌子:
permissions:
id
permission_name
roles:
id
role_name
user_roles:
id
user_id
role_id
user_permissions:
id
user_id
permission_id
role_permissions:
id
role_id
permission_id
users:
id
username
email
现在,我想为权限的Eloquent模型添加自定义函数,名为 getUsersWithPermission()。
现在,用户可能已经通过其所授予的角色获得了权限(用户表在user_roles上进行联接,在role_permissions上进行联接,最后在权限上进行联接。
或者用户在user_permissions表中设置了特定的权限(在user表上加入user_permissions表,在user_permissions表上加入权限表)
如何创建一个Eloquent模型函数,该函数返回具有特定权限的所有用户说:“ notification.error.process”,其中是权限名称
一个 hasMany 并没有完全满足我的要求(并且我无法在其中定义多个表)。我正在使用Laravel 5.6。
答案 0 :(得分:0)
如果您正确定义了多对多关系(User-Permission和User-Role-Permission),则应使用以下方法:
$permissionName = 'notification.error.process';
$usersWithPermission = User::whereHas('permissions', function($query) use ($permissionName) {
$query->whereName($permissionName);
})->orWhereHas('roles.permissions', function($query) use ($permissionName) {
$query->whereName($permissionName);
})->get();
答案 1 :(得分:0)
尝试使用此ER图了解您的表结构。
要处理这种情况,您可以创建3个“口才模型”
在每个模型中,您可以创建与其他模型的belongsToMany()
关系。
一个示例,关于“用户模型”
public function permissions()
{
// need to define any other differences in your tables foreign keys as 2nd, 3rd parameters and so on.
return $this->belongsToMany(Permission::class);
}
现在,您需要让所有用户“拥有具有特权的角色” OR “直接拥有特权的用户。
这样做。
$users = User::whereHas('privileges', function($query) {
$query->where('permission_name', 'notification.error.process');
})->orWhereHas('roles.permissions', function($query) {
$query->where('permission_name', 'notification.error.process');
})->get();
希望您能有个主意。您的代码可能与我的代码略有不同。但这就是概念。