【问题标题】:Role Based Access Control (RBAC) cares about permission or roles?基于角色的访问控制 (RBAC) 关心权限或角色?
【发布时间】:2014-01-25 13:49:27
【问题描述】:
在阅读http://en.wikipedia.org/wiki/Role-based_access_control 并看到人们构建授权/访问控制的方式后,我想到了这个问题“为什么我们在检查用户是否被允许执行 X 时检查用户的角色而不是检查他们的权限?”
这就是我的理解,用户有角色,角色有权限,这就是用户如何拥有权限(用户不能明确地拥有分配给它的权限,它通过拥有角色来获得它的权限)
我认为在处理添加用户的请求时检查“AddUser”之类的权限是有意义的,但在 .Net 库中以及在 RBAC 中的许多示例中,我们看到它们检查角色。就像他们检查用户是否具有管理员角色,而不是检查他/她是否具有“AddUser”权限。
为什么?检查权限对我来说更有意义。
有人可以在这里照亮我吗?
谢谢
【问题讨论】:
标签:
security
permissions
rbac
security-roles
【解决方案1】:
如果我们简化 RBAC 系统,RBAC 是一种基于组织用户的权限限制对“某些来源或应用程序或应用程序的某些功能”的访问的方法。这里的限制可以是多个权限,由管理员创建来限制访问,这些权限共同代表一个角色,将分配给用户。
您的情况可能部分正确:)
但是考虑一个复杂的应用程序,其中有 200 个权限,管理员需要定义几组权限来通过角色来表示特定行为,这将为该用户创建某种复杂的自定义和重新呈现形式.
这里可能需要通过'HasRole('SomeRole')'方法检查来定义用户的确切行为。
所以,我的回答是,这两种方法在 RBAC 中同样重要。
1) HasPermission(‘permissionName’)
2) HasRole(‘角色名’)
一个好的 RBAC 解决方案应该同时提供这两种方法。市面上有这样的工具,你可以去查一下。
【解决方案2】:
您是正确的 - 检查应用程序中的角色而不是权限不是基于角色的访问控制。 Spring 安全性和许多其他突出的访问控制机制传播了这种安全性反模式。为了正确使用 RBAC - 在您的策略实施逻辑中执行权限检查。