RBAC:通过多个属性控制访问

时间:2015-12-08 13:26:46

标签: authorization yii2 access-control rbac abac

模型(表):

  • 项目(id,name,category_id,status_id)
  • 类别(ID,名称)
  • 状态(身份证,姓名)

我需要按照确切类别和确切状态限制对项目的访问。

情况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之外移动授权控制,并且在角色层次结构支持下继续使用。

1 个答案:

答案 0 :(得分:0)

除了RBAC中的角色之外,如果需要使用其他属性,则需要查看基于属性的访问控制(ABAC)。

一些框架和解决方案实现了ABAC,例如

  • Apache Shiro
  • WSO2 IS
  • Axiomatics Policy Server

通常,ABAC是在称为XACML(可扩展访问控制标记语言)的标准之上实现的。 XACML为您提供了一种规则语言,您可以在其中表达规则,例如

“属于某个类别的用户可以查看该类别中的项目”。

ABAC更具动态性,更易于管理。审计比RBAC好。