Spring Ssecurity ACL - 域状态更改



我们已经建立了 spring 安全项目,其中包含基于角色的身份验证和隐式和显式角色的角色层次结构。 我们还有一个额外的要求,即根据域对象的状态提供不同的授权。 例如:

顺序域对象:

  • 当订单处于初始状态时
    • 字段 1、2、3 可由角色 A 编辑,可由角色 B 查看
    • 字段 4、5、6 可按角色 A 和角色 B 进行编辑
  • 当订单处于 QA 状态时
    • 字段 1、2、3 可由角色 A 查看,可由角色 B 编辑
    • 字段 4、5、6 可按角色 A 和角色 B 查看
  • 当订单处于"已完成"状态时
    • 字段 1、2、3 可由角色 A 查看,并由角色 B 查看
    • 字段 4、5、6 可由角色 A 和角色 B 查看

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

Spring 域对象

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

你说得很对。Spring 安全性权限评估器和 ACL 基础结构在域对象级别工作,而不是字段级别。您可以创建诸如EDIT_FIELD1EDIT_FIELD2VIEW_FIELD1等权限,但感觉有点强迫。当然,您可以使用其他带有@PreAuthorize注释等的 Spring 安全基础架构,并使用自定义代码进行扩展。

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

最新更新