向RBAC中的用户授予特殊特权

时间:2019-06-30 05:20:01

标签: oop security design-patterns architecture roles

我正在使用基于角色的访问控制来在企业软件中进行授权。我创建了三个类:UserRolePrivilege。用户与角色具有多对多关系,而角色与特权具有多对多关系。客户的要求之一是为特定用户添加特殊特权。例如,用户u具有一个名为r的角色,因此u只能调用foo服务。但是我想添加特权p,以便他也可以调用bar服务,即使他的角色不允许他调用bar。 我想到的唯一解决方案是,用户与特权也具有多对多关系。但是我认为这不是一个好主意。

1 个答案:

答案 0 :(得分:1)

如果在用户和特权之间创建多对多关系不利于您正在创建的系统,则可以为特殊特权创建一次性角色。例如,如果用户u具有角色r0rn,角色具有特权p0pn,则没有权限访问资源{{1 }},然后您可以创建一个特殊角色res1,该角色可以访问rs并将该角色分配给res1

因此,用于创建特殊特权的算法为:

  1. 创建有权访问所需资源的特权u
  2. 创建角色p,并为其分配r
  3. p分配给用户r

使用此方案,用户u现在将能够访问up0允许的所有资源,以及在pn中创建的p可以访问的资源。步骤(1)。

如果许多用户需要这些特殊特权(即,许多用户需要对同一资源的特殊访问权限),则可以重用角色。例如,根据需要,可以为每个所需资源创建一个新角色(上述算法中的步骤(2)),并且可以将该角色分配给多个用户。如果不需要重用,则每次需要特殊特权时都可以创建一个新角色和特权。后一种情况(不重复使用)的优点是它比前一种情况更简单。