Laravel 用户管理

Laravel user management

在 Laravel 中,我们可以轻松管理用户和权限,但我的应用程序有问题。

在我的应用程序中,用户关联到一个或多个部门。

但是一个用户在部门之间可以有不同的Role/Permission。那就是问题所在。在部门一中,他可以拥有管理员角色,而在部门二中,他只能拥有用户角色。当用户在部门之间切换时,我希望他的角色可以更新。

我如何在 Laravel 和 Eloquent 中管理它?

感谢您的帮助。

杰弗里

没有看到你的任何代码,我不得不在这里相当笼统。但这是基本概念。

建筑

假设您已经有 table 个 departmentsusersrolespermissions,接下来您需要定义一个连接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() 方法即可。