【问题标题】:Grant special priviliges to user in RBAC在 RBAC 中授予用户特殊权限
【发布时间】:2019-07-02 03:25:03
【问题描述】:

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

【问题讨论】:

    标签: oop security design-patterns architecture roles


    【解决方案1】:

    如果在 User 和 Privilege 之间创建多对多关系不利于您正在创建的系统,那么您可以为特殊权限创建一次性角色。例如,如果用户u 具有角色r0 到rn,这些角色具有权限p0 到pn,这些角色都没有访问资源res1 的权限,那么您可以创建一个特殊角色@ 987654327@,允许访问res1并将该角色分配给u。

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

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

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

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

    【讨论】:

    • 谢谢,这似乎是个好主意。我有另一个要求,我想知道你是否可以帮助我。有时客户需要为用户禁用某个特权,即使他的角色允许他访问它。如何使用当前结构实现这一目标?
    • @NarimanEsmaielyFard 您可以向用户添加禁用权限列表。遍历角色和权限树后,您将删除该用户禁用列表中的权限,并保留当前为该用户启用的权限。
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多