Spring Security ACL - 域状态更改

时间:2015-01-14 14:47:29

标签: java spring-security acl

我们已经为隐式和显式角色设置了基于角色的身份验证和角色层次结构的Spring安全项目。我们还需要根据域对象的状态提供不同的授权。例如:

订购域对象:

  • 订单处于初始状态时
    • 字段1,2,3可由RoleA编辑,Viewable可由RoleB编辑
    • 字段4,5,6可由RoleA和Role B编辑
  • 当订单处于QA状态时
    • 字段1,2,3可由RoleA查看,可由RoleB编辑
    • 字段4,5,6可由角色A和角色B
    • 查看
  • 订单处于完成状态时
    • 字段1,2,3可由RoleA查看,也可由RoleB查看
    • 可以通过RoleA和RoleB
    • 查看字段4,5,6

我们使用ant匹配器的标准spring安全URL级别安全性不足以处理授权要求,因为相同的服务URL用于查看(GET)并保存(PUT)订单域对象(如果它们处于任何状态) 。我们还希望为每个权限集中的哪些字段配置流程。

Spring Domain Object Security看起来适用于状态固定或不变的域对象 - 由特定用户创建的博客条目等...
这个要求可以由Spring Domain Object Security处理,还是应该通过自定义代码/配置更好地处理?

1 个答案:

答案 0 :(得分:0)

你是对的。 Spring Security权限评估程序和ACL基础结构适用于域对象级别,而不是字段级别。您可以创建EDIT_FIELD1EDIT_FIELD2VIEW_FIELD1等权限,但感觉有点强迫。当然,您可以将其他Spring Security基础结构与@PreAuthorize注释等一起使用,并使用自定义代码进行扩展。

如果您对用户有信心且被允许放弃安全性,我建议跳过字段级别,并仅评估订单状态和角色。你可能想要一些关于谁正在编辑什么的审计日志。字段可以在用户界面中变暗以避免意外编辑。我看到工作流程应用程序以这种方式运行。