【问题标题】:Handling different types of user roles in Laravel在 Laravel 中处理不同类型的用户角色
【发布时间】:2017-07-16 02:02:06
【问题描述】:

我有一个 web 项目,它有 3 种类型的用户,比如 root 管理员、超级管理员和厨房管理员。每个用户或角色都有不同的功能:root 管理员将创建超级管理员和其他小功能,就像超级管理员将创建厨房管理员和其他功能一样,厨房管理员有自己的功能,比如处理订单。

我想知道为每个用户单独设置 laravel 是否是个好主意,或者所有这些用户都可以在一个 laravel 设置中开发?

由于我是 laravel 的新手,因此在这方面的小小线索会很有帮助。

【问题讨论】:

  • 了解基于角色的访问控制 (RBAC)
  • 您需要为所有 3 种类型的用户创建不同的中间件。并从link 进一步了解中间件。
  • 还要考虑这样一个事实,这些用户会有一个单独的登录页面。 @YamanJain

标签: php laravel laravel-5 roles


【解决方案1】:

您可以为每个用户进行单独的设置。那会奏效。但也很难维护,您可能必须编写 3 次某些函数(登录、注销、CRUD 等)。

但是,您可以使用授权创建单个项目。开箱即用,Laravel 为您提供了一种通过Gate 授权和限制某些操作或通过Policy 限制模型的简单方法。您还可以通过 Middleware 限制 URL。看到你有 3 种不同的限制动作的方式。

我的个人偏好是Policy,因为它与模型绑定。您有一个权限列表并为每个角色授予权限,例如:'create_sys_admin'。然后将此权限链接到“root_admin”角色。所以在你的政策中你可以写:

public function createSysAdmin(User $user) {
    return $user->role->permissions->contains('create_sys_admin');
}

通过定义策略,我们可以检查控制器中的 propser 权限。在控制器中的任何功能中,您始终可以检查适当的权限

if ( Auth::user()->cant('create_sys_admin', User::class) ) {
    return redirect()->back()->withErrors(['authorization' => 'You are not authorized to perform that action']);
}

这只是一种方式。正如我之前所说,你也有 Gates 和 Middlewares。在这里阅读更多:https://laravel.com/docs/5.4/authorization

如果你想要一些已经制作好的东西,你可以使用这个包:https://github.com/Zizaco/entrust

【讨论】:

  • 正如我所说,每个用户信息(包括用户名和密码)都将存储在单独的表中以避免复杂性。还要注意,这些用户不会共享相同的功能或特性。例如。厨房管理员将拥有一组不同于 root 管理员和超级管理员的功能。
  • 也许你应该去链接到同一个数据库的多个项目。为每个用户类型/项目提供不同的视图和操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2016-08-23
  • 2023-03-09
  • 2010-10-07
  • 2021-07-08
  • 2019-05-27
相关资源
最近更新 更多