在阅读http://en.wikipedia.org/wiki/Role-based_access_control并看到人们构建授权/访问控制的方式之后,我想到了这个问题“为什么我们在检查用户是否被允许做X而不是检查他们的权限时检查用户的角色?“
这就是我所理解的,用户拥有角色,角色拥有权限,这就是用户拥有权限的方式(用户无法明确分配权限,通过角色获得权限)
我认为在处理添加用户但在.Net库中的请求时检查“AddUser”等权限是有意义的,而且在RBAC的很多示例中我们看到他们检查角色。就像他们检查用户是否在管理员角色而不是检查他/她是否具有“AddUser”权限。
为什么呢?检查权限对我来说更有意义。
有人可以在这里照亮我吗?
由于
答案 0 :(得分:3)
您是对的 - 检查应用程序中的角色而不是权限不是基于角色的访问控制。 Spring安全性和许多其他着名的访问控制机制传播这种安全反模式。要正确使用RBAC,请在策略实施逻辑中执行权限检查。
答案 1 :(得分:1)
如果我们简化RBAC系统,RBAC是一种根据组织用户的权限限制对“某些来源或应用程序或某些应用程序功能”的访问的方法。在这里,限制可以通过多个权限进行,这些权限由管理员创建以限制访问权限,这些权限共同代表一个角色,该角色将分配给用户。
你的情况可能部分正确:)
但是考虑一个复杂应用程序的案例,其中有200个权限,管理员需要定义几组权限来表示通过角色的特定行为,这将为该用户创建一些复杂的自定义和表示形式
这里可能需要通过'HasRole('SomeRole')'方法检查以定义用户的确切行为。
所以,我的答案是,这两种方法在RBAC中同样重要。
1)HasPermission('permissionName')
2)HasRole('roleName')
一个好的RBAC解决方案应该提供这两种方法。市场上有这样的工具,你可以检查它们。