在 RBAC 中授予用户特殊权限
Grant special priviliges to user in RBAC
我在企业软件中使用基于角色的访问控制进行授权。我创建了三个 类:User
、Role
和 Privilege
。 User 与 Role 具有多对多关系,Role 与 Privilege 具有多对多关系。客户的要求之一是为特定用户添加特殊权限。例如,用户 u
有一个名为 r
的角色,据此,u
只能调用 foo
服务。但我想添加权限 p
,这样他也可以调用 bar
服务,即使他的角色不允许他调用 bar
。
我想到的唯一解决方案是 User 也与 Privilege 有多对多的关系。但我认为这不是个好主意。
如果在User和Privilege之间创建many-to-many关系不利于您正在创建的系统,那么您可以为特殊权限创建一个one-off角色。例如,如果用户 u
的角色 r0
到 rn
具有权限 p0
到 pn
,其中 none 有权访问资源, res1
, 然后您可以创建一个特殊角色 rs
, 允许访问 res1
并将该角色分配给 u
.
因此,创建特殊权限的算法是:
- 创建权限,
p
,可以访问所需的资源
- 创建角色
r
,并为其分配 p
- 将
r
分配给用户 u
使用此方案,用户 u
现在将能够访问 p0
至 pn
允许的所有资源,以及 p
可访问的资源在步骤 (1) 中创建。
如果许多用户需要这些特殊权限(即,许多用户需要对同一资源的特殊访问权限),则可以重复使用该角色。例如,根据需要,可以为每个所需资源创建一个新角色(上述算法中的步骤 (2)),并且可以将该角色分配给多个用户。如果不需要重用,可以在每次需要特殊权限时创建新的角色和权限。后一种情况(non-reused)的优点是比前一种简单
我在企业软件中使用基于角色的访问控制进行授权。我创建了三个 类:User
、Role
和 Privilege
。 User 与 Role 具有多对多关系,Role 与 Privilege 具有多对多关系。客户的要求之一是为特定用户添加特殊权限。例如,用户 u
有一个名为 r
的角色,据此,u
只能调用 foo
服务。但我想添加权限 p
,这样他也可以调用 bar
服务,即使他的角色不允许他调用 bar
。
我想到的唯一解决方案是 User 也与 Privilege 有多对多的关系。但我认为这不是个好主意。
如果在User和Privilege之间创建many-to-many关系不利于您正在创建的系统,那么您可以为特殊权限创建一个one-off角色。例如,如果用户 u
的角色 r0
到 rn
具有权限 p0
到 pn
,其中 none 有权访问资源, res1
, 然后您可以创建一个特殊角色 rs
, 允许访问 res1
并将该角色分配给 u
.
因此,创建特殊权限的算法是:
- 创建权限,
p
,可以访问所需的资源 - 创建角色
r
,并为其分配p
- 将
r
分配给用户u
使用此方案,用户 u
现在将能够访问 p0
至 pn
允许的所有资源,以及 p
可访问的资源在步骤 (1) 中创建。
如果许多用户需要这些特殊权限(即,许多用户需要对同一资源的特殊访问权限),则可以重复使用该角色。例如,根据需要,可以为每个所需资源创建一个新角色(上述算法中的步骤 (2)),并且可以将该角色分配给多个用户。如果不需要重用,可以在每次需要特殊权限时创建新的角色和权限。后一种情况(non-reused)的优点是比前一种简单