【问题标题】:RBAC: control access by several attributesRBAC:通过几个属性控制访问
【发布时间】:2016-03-13 10:41:29
【问题描述】:

模型(表格):

  • 项目(id、名称、category_id、status_id)
  • 类别(ID、名称)
  • 状态(ID、姓名)

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

情况 1.

Role1 应有权访问类别 ID 为 1 和 3 的项目,但 Role2 应有权访问类别 ID 为 2 和 4 的项目。

情况2。

角色应该有权访问项目: 类别 1,但仅限状态 5 或 6 具有类别 2,但仅限于具有状态 7 或 8 的那些

可以创建和删除类别和状态。

如何在 RBAC 概念中实现这样的访问控制?

对于情况 1,我的想法是动态创建具有“accessItemWithCategory_{$categoryId}”等名称的权限,并将其分配给适当的角色,然后检查用户是否可以(“accessItemWithCategory_{$categoryId}”)。它有效,但感觉不对。

对于情况 2,如果继续这种方法,我会获得像“accessItemWithCategory_{$categoryId}_Status_{$statusId}”这样的权限,它只是丑陋且极其不灵活。

如果不在权限名称中使用 id 比什么?我可以使用简单的权限“accessItem”和规则来检查带有角色和项目参数的额外表,这些参数将允许角色访问项目?但这意味着将授权控制移到 RBAC 之外,并通过角色层次结构支持地狱。

【问题讨论】:

  • 为您的权限编写自定义规则。
  • @ineersa 是的,但是我应该在自定义规则中做什么?

标签: authorization yii2 access-control rbac abac


【解决方案1】:

当您需要在 RBAC 中使用除了角色之外的其他属性时,您需要研究基于属性的访问控制 (ABAC)。

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

  • 阿帕奇希罗
  • WSO2 是
  • 公理策略服务器

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

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

ABAC 比 RBAC 更具动态性,更易于管理和审核。

【讨论】:

  • 嗨,David,这是否意味着我可以采用 Apache Shiro 作为 ABAC 解决方案?谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-11-23
  • 2011-03-26
  • 2018-01-21
  • 1970-01-01
  • 2014-09-07
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多