Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Ssecurity ACL-域状态更改_Java_Spring Security_Acl - Fatal编程技术网

Java Spring Ssecurity ACL-域状态更改

Java Spring Ssecurity ACL-域状态更改,java,spring-security,acl,Java,Spring Security,Acl,我们已经为spring安全项目建立了基于角色的身份验证和隐式和显式角色的角色层次结构。我们还需要根据域对象的状态提供不同的授权。例如: 订单域对象: 订单处于初始状态时 字段1、2、3可由RoleA编辑,并可由RoleB查看 字段4、5、6可由角色A和角色B编辑 订单处于QA状态时 字段1、2、3可由RoleA查看,也可由RoleB编辑 字段4、5、6可由角色A和角色B查看 订单处于完成状态时 字段1、2、3可由RoleA查看,也可由RoleB查看 RoleA和RoleB可查看字段4

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

订单域对象:

  • 订单处于初始状态时
    • 字段1、2、3可由RoleA编辑,并可由RoleB查看
    • 字段4、5、6可由角色A和角色B编辑
  • 订单处于QA状态时
    • 字段1、2、3可由RoleA查看,也可由RoleB编辑
    • 字段4、5、6可由角色A和角色B查看
  • 订单处于完成状态时
    • 字段1、2、3可由RoleA查看,也可由RoleB查看
    • RoleA和RoleB可查看字段4、5、6
我们使用ant matchers提供的标准spring安全URL级别的安全性不足以处理授权要求,因为相同的服务URL用于查看(获取)和保存(放置)order域对象(如果它们处于任何状态)。我们还希望对每个权限集中的字段进行配置

Spring域对象安全性似乎适用于状态为固定或不变的域对象—由特定用户创建的博客条目等。

这个需求可以由Spring域对象安全性来处理,还是应该通过自定义代码/配置来更好地处理

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


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

多亏了holmis,我没有深入到单个字段级别,而是关注一小组字段。你提出了一个很好的审计线索,我们将有。我还计划调暗场地。因为这是一个内部应用程序,并且我们有审计和灰色字段,所以我们也不需要URL上额外的安全级别