0

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

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

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

我如何在 Laravel 和 Eloquent 中管理这个?

感谢您的帮助。

杰弗里

4

1 回答 1

3

在没有看到您的任何代码的情况下,我被迫在这里相当通用。但这是基本概念。

建筑学

假设您已经有像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 的GatesPolicies很好地配合使用。只需hasPermissionTo()在您的门/政策定义中使用您的新方法。

于 2016-08-31T20:19:39.883 回答