在 RBAC 中授予用户特殊权限

Grant special priviliges to user in RBAC

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

如果在User和Privilege之间创建many-to-many关系不利于您正在创建的系统,那么您可以为特殊权限创建一个one-off角色。例如,如果用户 u 的角色 r0rn 具有权限 p0pn,其中 none 有权访问资源, res1, 然后您可以创建一个特殊角色 rs, 允许访问 res1 并将该角色分配给 u.

因此,创建特殊权限的算法是:

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

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

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