【问题标题】:laravel users with several roles having several permissions具有多个角色的 laravel 用户具有多个权限
【发布时间】:2019-05-03 06:59:22
【问题描述】:

我想在 laravel 中创建一个 RBAC 系统,一个用户可以属于多个角色,每个角色可以有多个权限。中间件应在继续请求之前检查用户是否具有特定权限(在他们的任何角色内)。

我能够实现一个案例

  • 一个用户属于一个角色,该角色拥有许多权限
  • 一个用户属于多个角色,这些角色用于确定访问控制(没有权限位)

我需要实现一个具有多个角色的用户,该用户具有多个权限。有什么指点吗?

【问题讨论】:

  • 您能否概述一下您目前已实现的内容,即 db 表、雄辩的关系、您如何执行检查等?
  • spatie 或 laratrust 包呢?!
  • 使用基于属性的访问控制 (abac) 或者像@IsmoilShifoev 所说,使用现有的 laravel 包。

标签: laravel middleware access-control rbac


【解决方案1】:

如果你对自己编写代码不感兴趣,像 Laravel 权限这样的包会完全满足你的要求。

https://github.com/spatie/laravel-permission

否则您需要在用户及其角色以及角色及其权限之间创建数据透视表

因此您将拥有一个包含 user_id 和 role_I'd 的 user_roles 表。

您还将拥有一个包含 role_id 和 permission_id 的 role_permissions 表。

这将允许您建立多对多关系并建立许多直通关系以直接从用户到角色以及从角色到用户。

希望有帮助

【讨论】:

  • 我这样做了,但是中间件返回一个错误Too many arguments to function App\\Http\\Middleware\\CheckRole::handle(), 2 pass in /Library/WebServer/Documents/gmoney /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php 在第 151 行,预计正好是 3"
  • 我正在使用 api.php 中的中间件
  • @muoki_D 我需要更多细节。能否请您发布您的代码以便我们查看?
【解决方案2】:

作为概述。您需要在数据库中有一个roles 表,它定义了您的应用程序可以拥有的不同类型的用户,例如(管理员、作者、编辑、版主等)

您还需要定义一个表role_user,其中包含有关哪个用户具有哪个角色的数据。这将是多对多关系,因为用户可以拥有多个角色。

接下来,您需要定义一个中间件CheckRole,它基本上检查用户是否具有特定角色。您可以在应用程序的不同部分使用此中间件来限制身份验证。

您可能会发现本教程很有用:

https://www.5balloons.info/user-role-based-authentication-and-access-control-in-laravel/

【讨论】:

  • 避免从头开始实施访问控制并使用现有工具
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多