Laravel 用户管理
Laravel user management
在 Laravel 中,我们可以轻松管理用户和权限,但我的应用程序有问题。
在我的应用程序中,用户关联到一个或多个部门。
但是一个用户在部门之间可以有不同的Role/Permission。那就是问题所在。在部门一中,他可以拥有管理员角色,而在部门二中,他只能拥有用户角色。当用户在部门之间切换时,我希望他的角色可以更新。
我如何在 Laravel 和 Eloquent 中管理它?
感谢您的帮助。
杰弗里
没有看到你的任何代码,我不得不在这里相当笼统。但这是基本概念。
建筑
假设您已经有 table 个 departments
、users
、roles
和 permissions
,接下来您需要定义一个连接table。像这样:
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 and Policies 一起很好地工作。只需在 gate/policy 定义中使用新的 hasPermissionTo()
方法即可。
在 Laravel 中,我们可以轻松管理用户和权限,但我的应用程序有问题。
在我的应用程序中,用户关联到一个或多个部门。
但是一个用户在部门之间可以有不同的Role/Permission。那就是问题所在。在部门一中,他可以拥有管理员角色,而在部门二中,他只能拥有用户角色。当用户在部门之间切换时,我希望他的角色可以更新。
我如何在 Laravel 和 Eloquent 中管理它?
感谢您的帮助。
杰弗里
没有看到你的任何代码,我不得不在这里相当笼统。但这是基本概念。
建筑
假设您已经有 table 个 departments
、users
、roles
和 permissions
,接下来您需要定义一个连接table。像这样:
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 and Policies 一起很好地工作。只需在 gate/policy 定义中使用新的 hasPermissionTo()
方法即可。