模型(表):
我需要按照确切类别和确切状态限制对项目的访问。
情况1。
Role1应该可以访问具有ID为1和3的类别的Items,但是对于具有ID为2和4的类别的Items,则为Role2。
情况2.
角色应该有权访问Items: 类别1,但只有状态5或6 第2类,但只有状态7或8
可以创建和删除类别和状态。
如何在RBAC概念中实现这种访问控制?
对于情境1,我的想法是动态创建名称为" accessItemWithCategory _ {$ categoryId}"并将其分配给适当的角色,然后检查用户是否可以(" accessItemWithCategory _ {$ categoryId}")。它有效,但感觉不对。
对于情境2,如果继续采用这种方法,我会获得类似" accessItemWithCategory _ {$ categoryId} _Status _ {$ statusId}"它只是丑陋而且非常不灵活。
如果在权限名称中不使用id而不是什么?我可以使用简单的权限" accessItem"使用规则检查带有角色和Item参数的额外表,以允许角色访问Item?但这意味着在RBAC之外移动授权控制,并且在角色层次结构支持下继续使用。
答案 0 :(得分:0)
除了RBAC中的角色之外,如果需要使用其他属性,则需要查看基于属性的访问控制(ABAC)。
一些框架和解决方案实现了ABAC,例如
通常,ABAC是在称为XACML(可扩展访问控制标记语言)的标准之上实现的。 XACML为您提供了一种规则语言,您可以在其中表达规则,例如
“属于某个类别的用户可以查看该类别中的项目”。
ABAC更具动态性,更易于管理。审计比RBAC好。