从您的描述中,听起来像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可能对您的用例来说太过分了,但仍然值得考虑.