1

型号(表):

  • 项目(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 之外,并在角色层次结构支持下地狱。

4

1 回答 1

0

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

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

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

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

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

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

于 2015-12-09T01:24:24.780 回答