我使用 Nested Sets model 处理对象层次结构。我想为单个对象设置 CRUD 操作的权限。作为管理访问权限的系统,我使用 PHP RBAC。我该如何解决这个问题?
经过对问题的一些分析,我认为可以为对象上的每个 CRUD 操作创建四个权限树并单独获取每个权限,但我认为这不是最佳解决方案。
作为替代方案,我考虑使用单个权限树,哪些节点对应于操作“读取”,每个节点都有子元素“创建”、“更新”和“删除”,但我不确定该模型可以使用 PHP RBAC 实现。
欢迎任何建议或引用 Material 。我确信在这个主题上我还没有找到一些 Material 。
最佳答案
RBAC 在这里可能还不够,因为您有:
- 资源的层次结构
- 不同的操作
- 用户和资源之间的潜在关系。
要实现您的场景,您可以使用 RBAC 并使用 ABAC(基于属性的访问控制)对其进行扩展。借助 ABAC,您可以获得以下好处:
- 将授权逻辑外部化到中央策略决策点
- 您将授权逻辑表达为策略而不是角色
- 策略可以使用用户、资源、操作和上下文的任何属性
您可以在ABAC中表达以下场景:
- 如果 document.location==user.location,则具有角色 ==manager 的用户可以对文档执行操作==edit
XACML(可扩展访问控制标记语言)实现了 ABAC。您可以在此处阅读有关 XACML 和 ABAC 的更多信息:
关于crud - 使用 RBAC 指定 CRUD 操作的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28854302/