在 Laravel 中,我们可以轻松管理用户和权限,但我的应用程序有问题。
在我的应用程序中,用户附加到一个或多个部门。
但是用户可以在部门之间具有不同的角色/权限。那就是问题所在。在部门一中,他可以拥有管理员角色,而在部门二中,他只能拥有用户角色。当用户在部门之间切换时,我希望他的角色可以更新。
我如何在 Laravel 和 Eloquent 中管理这个?
感谢您的帮助。
杰弗里
在 Laravel 中,我们可以轻松管理用户和权限,但我的应用程序有问题。
在我的应用程序中,用户附加到一个或多个部门。
但是用户可以在部门之间具有不同的角色/权限。那就是问题所在。在部门一中,他可以拥有管理员角色,而在部门二中,他只能拥有用户角色。当用户在部门之间切换时,我希望他的角色可以更新。
我如何在 Laravel 和 Eloquent 中管理这个?
感谢您的帮助。
杰弗里
在没有看到您的任何代码的情况下,我被迫在这里相当通用。但这是基本概念。
假设您已经有像departments
, users
, roles
,之类的表,permissions
接下来您需要定义一个连接表。像这样的东西:
department_role_user
department_id
// 这个部门role_id
// 这个角色被分配给user_id
// 这个用户hasPermissionTo()
在您的用户模型上定义类似方法的东西。
class User
{
public function hasPermissionTo($action, $department)
{
// first get permission
$permission = Permission::where('action', $action)->first();
// get all roles which have this permission
$roles = $permission->roles;
return DB::table('department_role_user')
->where('user_id', $this->id) // current user
->where('department_id', $department->id) // the dept
->whereIn('role_id', $roles->pluck('id')) // any of the roles
->exists();
}
}
并像这样使用它。
if ($user->hasPermissionTo('do-something', $someDept)) {
// allow action
} else {
// no way
}
这也应该与 Laravel 的Gates和Policies很好地配合使用。只需hasPermissionTo()
在您的门/政策定义中使用您的新方法。