Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie如何处理角色层次结构和继承


Spatie如何处理角色层次结构和继承


Spatie的Laravel许可软件包本身不支持角色层次结构或继承。这意味着它没有内置功能来定义亲子之间的亲子关系,而父母角色会自动继承其子女角色的所有权限。

Spatie如何处理角色和权限

- 角色和权限存储在数据库中。
- 权限直接分配给角色。
- 用户被分配角色,通过这些角色,他们获得了相关的权限。
- 您还可以将权限直接分配给用户。
- 在检查权限时,包裹查看直接分配给用户的所有权限以及通过角色继承的权限。

###角色等级和继承

- 包装将角色视为平坦实体,而无需任何层次结构。
- 没有内置机制可以将一个角色分配给另一个角色或具有自动继承“子角色”的所有权限[1] [4]的“父角色”。
- 用户可以分配多个角色,这可以灵活地结合不同角色的权限,而不是依靠层次结构继承[2]。

###与Spatie实施角色层次结构的常见方法

由于Spatie不支持角色继承,因此开发人员经常实施解决方案,例如:

- 将所有权限明确分配给更高级别的角色:您可以手动为每个角色手动分配所有相关权限,而不是继承所有相关的权限,包括具有较低角色的所有权限,包括“超级公给”诸如“ Super-Admin” [2] [5]。

- 具有整数值的排名角色:某些开发人员为角色分配等级或级别(例如,用户为1,主持人2,为管理员3),然后在其应用程序中实现逻辑以根据用户的角色等级授予权限,有效地模拟层次结构[2]。

- 每个用户的多个角色:将多个角色分配给需要从不同角色中合并权限的用户,从而避免了对分层角色的需求[2]。

### 概括

- Spatie的软件包专注于将角色和权限作为独立的平坦实体管理。
- 它鼓励将权限直接分配给角色和用户,而无需角色对角色继承。
- 角色层次结构和继承必须在需要时手动实现,通常通过明确分配权限或使用自定义排名逻辑来实现。
- 该设计避免了父母角色的权限取决于子女角色的潜在问题,这可能会导致安全或管理的复杂性[1] [2] [4]。

因此,尽管Spatie提供了强大而灵活的权限系统,但它并不能在内部处理角色层次结构和继承。开发人员必须设计自己的策略,以在需要时模拟这种行为。

引用:
[1] https://github.com/spatie/laravel-permission/issues/685
[2] https://www.reddit.com/r/laravel/comments/jrhkc9/struggling_to_create_hierarchy_of_permissions_in/
[3] https://spatie.be/docs/laravel-permission/v6/introduction
[4] https://stackoverflow.com/questions/67520321/how-to-to-implement-hierarchical-rbac-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-to-implement-lole--con-control-control-in-laravel/
[6] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[7] https://www.youtube.com/watch?v=3HSBJCVWH78
[8] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[9] https://stackoverflow.com/questions/78213905/hierarchical-roles-for-a-user-with-child-child-child-------------------------------------
[10] https://stackoverflow.com/questions/75772209/spatie-lole-plugin-for-laravel-seed-seed-users-with-roles-doesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies-pololicies-and-gates----基于 - 基于 - 孔(基于核心)