如何使(Spatie / Permissions)角色或权限仅对特定帐户类型可用(可分配)

时间:2020-03-24 22:02:43

标签: php laravel permissions spatie laravel-permission

关于我的(Laravel 7)项目的一些背景信息/要求,需要了解/回答我的问题。

  • 我的应用程序具有可以拥有一个或多个用户(一对多关系)的帐户
  • 每个帐户都有一个类型(例如系统,组织,客户)
  • 我希望能够将角色分配给用户
  • 我希望能够通过角色(仅通过角色,而不是直接对用户)向用户分配权限
  • 角色应该是特定于类型的-因此只能准确分配给一个特定的帐户类型
  • 应该将权限分配给已定义(因此1 ... *)帐户类型的所有角色

我搜索了一个好的解决方案来满足上述要求,并找到了Laravel Spatie Permissions。我认为该库适合解决我的“问题”,但缺少某些功能。据我所知,它不可能:

  1. 为特定帐户类型定义角色
  2. 将权限限制为已定义帐户类型的角色

示例

  • 角色admin_default
    • 可以create_system_userssee_organizations
    • 只能分配给类型为system的帐户的用户
  • 角色customer_default
    • 可以see_organizations
    • 只能分配给类型为customer的帐户的用户
  • create_system_users权限只能分配给类型为system的帐户的角色
  • 可以将权限see_organizations分配给类型为system organization customer的帐户的角色

可能的解决方案1。

我可以在角色表中添加一个额外的列(例如account_type,类型:整数),以定义该角色可以分配给哪个帐户类型。我需要在一些权限库功能中添加额外的检查,例如asignRole()syncRoles()

可能的解决方案2。

我可以在权限表中增加一列(例如account_type,类型:bitflag),该列定义了可以将权限分配给哪些角色(与帐户类型相关)。

由于Spatie权限默认情况下不支持此功能,因此我需要添加功能,主要是对现有功能的逻辑进行if检查。因为我不想在lib本身中进行更改,所以我想做一些继承RolePermission类并“继承” HasRoles和{{1}类的类}。我会将HasPermissions配置文件中的rolespermissions条目指向我自己的类,并用自己的特征(而不是我的特征)覆盖我自己的类中的Permission.php确定这是否可行/应该在PHP中有效,但我的逻辑说应该有效,缺乏PHP知识)

我的问题

use是正确的库,还是有更好的“搁置”解决方案来解决我的问题? (或者Mayble Spatie Permissions默认情况下支持此功能,但我不知道吗?)

Spatie Permissions是“最好的出行方式”时,我的Spatie Permissions是好的方法吗?这应该工作吗? (现在也是在更新权限库时,是否还有将来的证明?)

我也可以自己写点东西,但是我认为这是在重新发明轮子或?

注意:我还考虑了未来的证明和可伸缩性

0 个答案:

没有答案