在 Laravel 中处理不同类型的用户角色

Handling different types of user roles in Laravel

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

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

因为我是 laravel 的新人,所以在这方面的一点领先会很有帮助。

您可以为每个用户进行单独设置。那行得通。但也很难维护,您可能不得不编写 3 次某些功能(登录、注销、CRUD 等)。

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

我个人的偏好是Policy,因为它与模型绑定。您有一个权限列表,并为每个角色赋予其权限,例如:'create_sys_admin'。然后link这个权限给'root_admin'角色。所以在你的政策中你可以写:

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

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

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

这只是一种方式。正如我之前所说,您也有盖茨和中间件。在这里阅读更多:https://laravel.com/docs/5.4/authorization

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