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