我试图在一个网站上实现RBAC (基于角色的访问控制)。
问题在于嵌套对象的权限。
假设我们在网站上有一些项目。每个用户都可以在每个项目中扮演一个角色。例如,user1在project1中具有管理角色,在project2中具有客户角色。
管理角色,例如,包含一些权限,比如添加子项目、删除子项目等等。
我读过的所有关于RBAC的文档都定义了一般权限,比如Add子项目,但是当用户拥有这个权限时,它可以为all projects而不是特定项目添加子项目(这里是project1)。
我如何将这样的许可限制在特定的项目上?
一个糟糕的解决方案是为每个项目定义新的权限。因此,权限将是向project1添加子项目,从project1删除子项目等,并定义相应的角色,如project1 Admin。
但是我对这种冗余并不满意;而项目本身可以动态地添加/删除。
发布于 2021-05-14 22:15:32
我认为您遇到了RBAC的一个已知限制:权限只能分配给用户角色(不能分配给资源或操作)。
最近,基于Google的桑给巴尔纸的权限服务有了越来越多的发展,它描述了一个更通用的权限系统,它支持描述资源、用户和它们之间的关系。
在基于桑给巴尔的系统中,您将为项目定义资源,为项目定义管理关系和客户关系,然后定义元组以显示表示数据的实际关系。因此,您可以定义和,这是一种简单的表示和检查资源粒度权限的方法。这是一个概念性的概述,但是有一些具体的服务,您可以在这里阅读它们的实现特定细节,并尝试它们。
我在研究授权作为我新工作的一部分时偶然发现了你的帖子,所以我加入了这个答案,以防其他人遇到类似的挑战。我们收集了一些可能有用的资源:
发布于 2020-07-02 21:47:10
免责声明:我是RBAC初学者
我理解RBAC的方式是,您拥有结合实际资源和操作的权限。在您的示例中:资源将为"project1“,操作将为"create_subproject",因此该权限将被称为"project1.create_subproject",这意味着您每个资源都有一个权限,因此出现了上述冗余。
我对你的问题的建议是引入一个ResourceGroup。不过,这并不是NIST RBAC标准的一部分。一个ResourceGroup将合并一种常见类型的资源。访问检查通过ResourceGroup中的所有对象,如果它找到您的特定资源,它可以评估允许的操作
https://stackoverflow.com/questions/62694075
复制相似问题