用于层次结构树角色的Spring Security / Java EE解决方案

我知道Spring Security适用于标准角色和基于权限的授权。 我不确定这种情况:

系统中管理着10,000名员工,员工组织成组织结构图(一组人员向各部门报告)。 其中一些员工是用户。 这些用户仅被允许访问其职责范围内的员工(他们在树中的分支/其员工的后代)。

所以我想知道现代Java EE(或其他)系统如何管理这些检查? Spring Security(ACL)可以做到这一点吗?如何建模?

我们的旧实现(多年前)是当用户访问员工时,我们可以通过递归树来检查所请求的员工是否是后代。 但这不是理想的解决方案,我们希望使用新的解决方案。

因为我已经在这个问题上工作了一个月,我可以给你我这个问题的答案,但是可能有更好的答案。
在Spring Security中有一些作为Role Hierarchy的东西,如果你使用ROLE_A> ROLE_B,那么ROLE_A将拥有ROLE_B拥有的所有授权。
所以这里有两个选择:

1.对于每个用户及其后代都有一对像。 用户的ROLE_USERi和后代的ROLE_USERiDESC。 你将会有
ROLE_USERi> ROLE_USERIDESC
但是(因为我不知道你的组织结构图)这可能是不够的,因为可能有很多这些对! 不知何故,如果您的树有两个或三个级别(ROLE_USER最多只有一个或两个优先级),那么它是合适的,因为角色越高,它将具有越多的权限。

在我的项目中(偶然相似),我做了另一种选择。 我有一些基本行为的基本角色。 我有一个“照顾小组”,照顾者可以在其中观察其后代数据。
我为什么要这么做? 因为我必须拥有一些行动的角色(如编辑,删除,访问一些敏感数据……)和关怀群体来观察。
如果A是B的看护者,它可以观察B的数据,但A不能做任何超出其权限的事情。

顺便说一句,它尚未经过全面测试,您可能会找到另一种可能的解决方案。

也可以看看:

  • Spring Security 3.1.x文档

当我们谈论Spring Security时,Spring提供了两件事。 1)角色管理2)ACL(域级权限)我认为您需要的是域级权限。

如果您计划使用角色管理,则通过为每个用户创建相应的角色,数据可能会增长。 第二个选项是使用域级权限(spring ACL),这是运行时授权的良好框架。 您可以将其用于基于注释的授权,但管理API非常有限(BasicLookupStrategy),因此在使用之前请先阅读文档。