混合 RBAC 设计——好还是坏?

Mixed RBAC design - fine or bad?

简介

我正在设计我的应用程序基于角色权限的访问系统。 在我的系统中,我有以下角色:

例如,让我们查看用户与 'task' 实体的关系。

WorkerCustomer 是非常特殊的角色,他们对自己的任务几乎只有只读权限。 Workers 将只能看到 'task' 对象的几个属性。 根据系统业务规则,在某些情况下,他们将能够更新一个或两个属性。

Root 用户无所不能,可以创建、更新、读取、删除'tasks'。 办公室经理 可以列出、更新和创建'tasks'。 审核员只能列出任务。

RootAuditorOffice manager 将有权访问相同(完整)集合'task' 个实体属性。 这三种用户类型将通过相同的管理界面(Web 应用程序模块)访问系统。

客户将通过单独的面向角色的模块(客户模块)访问系统,功能过于具体。 Workers - 也是(worker 模块)。

因此,使用描述的示例,我们可以说我们可以为 Root、Auditor 和 Office manager 创建以下权限:

这对他们有效,但对 CustomerWorker 无效。 对于 Worker 我们可以做:

...等等。

但这对我来说意义不大。 除了 Worker 之外,没有其他人会使用此权限。 此外,无法使用权​​限描述工作人员能够编辑 'task' 实体的某些属性的条件。

总结

所以,我得出一个结论,我需要一个混合访问控制系统。 Customers 和 Workers 将是没有任何权限的角色。 Root、Auditor 和 Office manager 将是具有绑定到每个角色的一组权限的角色。

最后,我们可以调用这种机制基于混合权限和角色的访问系统。

问题

有这样的设计很正常吗? 我想错了吗? 或者最好使用非常详细的权限列表来描述 CustomerWorker logic(尽可能多)?

我可能不会做这样的事情,因为它似乎无法长期维护。

Within an organization, roles are created for various job functions. The permissions to perform certain operations are assigned to specific roles. Members or staff (or other system users) are assigned particular roles, and through those role assignments acquire the computer permissions to perform particular computer-system functions. Since users are not assigned permissions directly, but only acquire them through their role (or roles), management of individual user rights becomes a matter of simply assigning appropriate roles to the user's account; this simplifies common operations, such as adding a user, or changing a user's department.

参考:https://en.wikipedia.org/wiki/Role-based_access_control

您还可以实施 ACL(访问控制列表)

An access control list (ACL), with respect to a computer file system, is a list of permissions attached to an object. An ACL specifies which users or system processes are granted access to objects, as well as what operations are allowed on given objects.[1] Each entry in a typical ACL specifies a subject and an operation. For instance, if a file object has an ACL that contains (Alice: read,write; Bob: read), this would give Alice permission to read and write the file and Bob to only read it.

我通常更喜欢 ACL 实现,因为它们提供了更精细的控制粒度。

参考:https://en.wikipedia.org/wiki/Access_control_list

看了你的想法后,你似乎想要实际实现 ACL。通过模板加载每个用户权限。当然,您始终可以同时实现两者,但这通常太过分了,之后您或多或少地拥有 Windows 操作系统的安全模型。