【问题标题】:Laravel user managementLaravel 用户管理
【发布时间】:2017-01-08 04:10:49
【问题描述】:

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

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

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

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

感谢您的帮助。

杰弗里

【问题讨论】:

  • 您当前的模型/代码是什么样的?
  • @TedGoas 我使用 Entrust 来管理用户角色权限。

标签: laravel eloquent laravel-5.3


【解决方案1】:

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

架构

假设您已经有 departmentsusersrolespermissions 之类的表,接下来您需要定义一个连接表。像这样的:

  • 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() 方法即可。

【讨论】:

  • 感谢您的帮助。我会试试这个解决方案。
猜你喜欢
  • 2017-07-07
  • 2014-07-12
  • 2020-06-15
  • 1970-01-01
  • 2016-09-01
  • 2016-08-19
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多