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