我想知道是否可以根据选定的类别设置角色.在我们的应用程序中,有类别包含文章.现在我们有一个像这样的角色层次结构:ROLE_ADMIN > ROLE_EDITOR > ROLE_USER
.问题是用户可能根据当前选择的类别拥有不同的角色:
user1 - cat1 - ROLE_USER user1 - cat2 - ROLE_EDITOR
这些类别不是静态的.可以添加新的和旧的删除.是否有可能使用Spring Security实现这一目标?
从您的描述中,听起来像Spring Security为您提供的RBAC模型是不够的.您有2个选项可供选择.或者:
您可以通过实现自己的Access Decision Manager来定制Spring Security(有关详细信息,请参阅此处)或
你转向基于属性的访问控制(也就是NIST 在这里解释的ABAC ).在Spring中使用ABAC的方法是使用XACML的Java实现,即可扩展访问控制标记语言.XACML为您提供了一个外化的,基于策略和属性的授权框架.这意味着您可以定义策略,例如具有role = manager的用户可以在category = foo中执行action = view.您可以拥有任意数量的规则,并相应地组合/计算它们.
XACML for Java有几种开源和供应商实现:
SunXACML
HerasAF
IBM
Axiomatics(免责声明:我工作的供应商)
如果您想了解有关XACML的更多信息,我建议您查看其维基百科页面以及包含供应商中立教程的YouTube 频道.
XACML可能对您的用例来说太过分了,但仍然值得考虑.