基于角色的访问控制(RBAC)关心权限还是角色?

4
在阅读http://en.wikipedia.org/wiki/Role-based_access_control并了解人们如何构建授权/访问控制后,我想到一个问题“为什么在检查用户是否有权限执行X时要检查用户的角色而不是检查他们的权限?”
我的理解是,用户拥有角色,角色拥有权限,这就是用户如何获得权限的方式(用户无法显式地分配权限,它通过拥有角色来获得权限)。
我认为,在处理添加用户的请求时,检查权限(如“AddUser”)是有意义的,但是在 .Net 库以及 RBAC 的许多示例中,我们看到他们检查角色。例如,他们会检查用户是否处于管理员角色,而不是检查他/她是否拥有“AddUser”权限。
为什么?我觉得检查权限更有意义。
请问有人可以给我解释一下吗?
谢谢!
2个回答

7
你是正确的——在应用程序中检查角色而不是权限,不是基于角色的访问控制(RBAC)。Spring Security和许多其他著名的访问控制机制传播了这种安全反模式。要正确使用RBAC,请在策略执行逻辑中执行权限检查。

1
如果我们简化RBAC系统,RBAC是一种基于组织用户的权限限制对“某些来源或应用程序或应用程序的某些功能”进行访问控制的方法。在这里,限制可以通过多个权限来实现,这些权限由管理员创建以限制访问,并且这些权限共同表示一个角色,该角色将被分配给用户。
你可能部分正确 :)
但考虑到复杂应用程序的情况,其中有200个权限,管理员需要定义一些权限集合来代表特定行为,通过角色来创建一些复杂的自定义和重现该用户的表单。
在这种情况下,可能需要通过“HasRole('SomeRole')”方法进行检查以定义用户的确切行为。
因此,我的答案是,RBAC中两种方法同样重要。
1)HasPermission('permissionName')
2)HasRole('roleName')
一个好的RBAC解决方案应该提供这两种方法。市场上有这样的工具,你可以查看它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接