Spring Ssecurity ACL - 域状态更改
Spring Ssecurity ACL - Domain State Change
我们已经建立了 spring 安全项目,其中包含基于角色的身份验证和隐式和显式角色的角色层次结构。我们还有一个额外的要求,就是根据领域对象的状态,提供不同的授权。例如:
订购域对象:
- 当订单处于初始状态时
- 字段 1、2、3 可由 RoleA 编辑,可由 RoleB 查看
- 字段 4、5、6 可由角色 A 和角色 B 编辑
- 当订单处于质量检查状态时
- 字段 1、2、3 可由 RoleA 查看,可由 RoleB 编辑
- 角色 A 和角色 B 可以查看字段 4、5、6
- 当订单处于已完成状态时
- 字段 1、2、3 对角色 A 可见,对角色 B 可见
- 角色 A 和角色 B 可以查看字段 4、5、6
标准 spring 安全性 URL 级安全性我们使用 ant 匹配器不足以处理授权要求,因为相同的服务 URLs 用于查看 (GET)并保存(PUT)订单域对象(如果它们处于任何状态)。我们还希望使流程可配置,以了解每个权限集中的哪些字段。
Spring 域对象安全性看起来适用于状态固定或恒定的域对象——特定用户创建的博客条目等...
Spring Domain Object Security 可以满足此要求,还是应该使用自定义代码/配置更好地处理?
你说得很对。 Spring 安全权限评估器和 ACL 基础结构在域对象级别而不是字段级别上工作。您可以创建 EDIT_FIELD1
、EDIT_FIELD2
、VIEW_FIELD1
等权限,但感觉有点勉强。当然,您可以使用带有 @PreAuthorize
注释等的其他 Spring 安全基础设施,并使用您的自定义代码进行扩展。
如果您对用户有一定的信心并且可以放松安全性,我建议跳过字段级别,只评估订单状态和角色。你可能想要一些审计日志,看看谁在编辑什么。用户界面中的字段可以变暗以避免意外编辑。我见过工作流应用程序以这种方式运行。
我们已经建立了 spring 安全项目,其中包含基于角色的身份验证和隐式和显式角色的角色层次结构。我们还有一个额外的要求,就是根据领域对象的状态,提供不同的授权。例如:
订购域对象:
- 当订单处于初始状态时
- 字段 1、2、3 可由 RoleA 编辑,可由 RoleB 查看
- 字段 4、5、6 可由角色 A 和角色 B 编辑
- 当订单处于质量检查状态时
- 字段 1、2、3 可由 RoleA 查看,可由 RoleB 编辑
- 角色 A 和角色 B 可以查看字段 4、5、6
- 当订单处于已完成状态时
- 字段 1、2、3 对角色 A 可见,对角色 B 可见
- 角色 A 和角色 B 可以查看字段 4、5、6
标准 spring 安全性 URL 级安全性我们使用 ant 匹配器不足以处理授权要求,因为相同的服务 URLs 用于查看 (GET)并保存(PUT)订单域对象(如果它们处于任何状态)。我们还希望使流程可配置,以了解每个权限集中的哪些字段。
Spring 域对象安全性看起来适用于状态固定或恒定的域对象——特定用户创建的博客条目等...
Spring Domain Object Security 可以满足此要求,还是应该使用自定义代码/配置更好地处理?
你说得很对。 Spring 安全权限评估器和 ACL 基础结构在域对象级别而不是字段级别上工作。您可以创建 EDIT_FIELD1
、EDIT_FIELD2
、VIEW_FIELD1
等权限,但感觉有点勉强。当然,您可以使用带有 @PreAuthorize
注释等的其他 Spring 安全基础设施,并使用您的自定义代码进行扩展。
如果您对用户有一定的信心并且可以放松安全性,我建议跳过字段级别,只评估订单状态和角色。你可能想要一些审计日志,看看谁在编辑什么。用户界面中的字段可以变暗以避免意外编辑。我见过工作流应用程序以这种方式运行。