【问题标题】:Spring Ssecurity ACL - Domain State ChangeSpring Security ACL - 域状态更改
【发布时间】:2015-01-14 14:47:29
【问题描述】:

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

订购域对象:

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

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

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

【问题讨论】:

    标签: java spring-security acl


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 holmis,我并没有深入到单个字段级别,而是在查看一小部分字段。您对我们将拥有的审计跟踪提出了一个很好的观点。我还计划调暗场。因为这是一个内部应用程序,而且我们有审核和暗色字段,所以我们也不需要 URL 的额外安全级别
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多