使用Spring Security的非线性角色层次结构

时间:2018-07-27 18:52:22

标签: spring spring-security

我正在尝试使用Spring Security(引导启动程序)实现具有“非线性”角色层次结构的结构。

为更好地解释它,请想象以下情况:

角色:

  • 总统
  • 人力资源总监
  • IT总监
  • 助手
  • 技术员

角色层次结构:

  • 人力资源总监>助理
  • IT总监>技术员

现在是问题:

  • 总裁>人力资源总监

AND

  • 总裁> IT总监

当我使用

注册角色层次结构时
roleHierarchy.setRoleHierarchy("PRESIDENT>HUMAN_RESOURCES_DIRECTOR");
roleHierarchy.setRoleHierarchy("PRESIDENT>IT_DIRECTOR");

它仅记录“ PRESIDENT> IT_DIRECTOR”。

这可能是因为我可能对Spring安全角色层次结构有误解。

无论如何,我如何应用它,以便我的“总裁”可以访问两个角色权限而无需添加大量的手动授权?


编辑:

为澄清起见,我发现的所有示例均遵循线性层次结构,例如

总裁> IT总监

IT总监>技术员


编辑2:

在Spring Security Debug中,当以暴露的方式实现此非线性角色层次结构时,我收到一条类似于以下消息:

getReachableGrantedAuthorities() - From the roles [ROLE_PRESIDENT] one can reach [ROLE_PRESIDENT, ROLE_IT_DIRECTOR] in zero or more steps.

1 个答案:

答案 0 :(得分:0)

问题在于对方法“ setRoleHierarchy”的理解。

该方法设置角色层次结构,而不添加它。

为了执行所需的操作,需要“连接”层次结构,例如:

String hierarchy = "ROLE_PRESIDENT > ROLE_IT_DIRECTOR "+"ROLE_PRESIDENT > ROLE_HUMAN_RESOURCES_DIRECTOR"; // Or write it straight up
roleHierarchy.setRoleHierarchy(hierarchy);