首页 > 解决方案 > 使用 Spring Security 的非线性角色层次结构

问题描述

我正在尝试使用 Spring Security (Boot Starter) 实现具有“非线性”角色层次结构的结构。

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

角色:

角色层次结构:

现在的问题:

当我使用注册角色层次结构时

roleHierarchy.setRoleHierarchy("PRESIDENT>HUMAN_RESOURCES_DIRECTOR");
roleHierarchy.setRoleHierarchy("PRESIDENT>IT_DIRECTOR");

它只记录“PRESIDENT> IT_DIRECTOR”。

这可能是因为我可能误解了 Spring Security Role Hierarchy。

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


编辑:

澄清一下,我发现的所有示例都遵循线性层次结构,例如

总裁 > 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.

标签: springspring-security

解决方案


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

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

为了做想要的事情,需要“连接”层次结构,如下所示:

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

推荐阅读