我知道Spring Security适用于标准角色和基于权限的授权。我不确定的是这种情况:
系统中管理着10,000名员工,员工被组织成一个组织结构图(一个向各部门报告的人员树)。其中一些员工是用户。这些用户仅被允许访问其职责范围内的员工(他们在树中的分支/员工的后代)。
所以我想知道现代Java EE(或其他)系统如何管理这些检查? Spring Security(ACL)可以执行此操作吗?如何对其进行建模?
我们的旧实现(多年前)是当用户访问员工时,我们可以通过递归树来检查所请求的员工是否是后代。但这不是理想的解决方案,我们希望使用新的解决方案。
答案 0 :(得分:6)
由于我已经在这个问题上工作了一个月,我可以给你我这个问题的答案,但是可能会有更好的答案。
Spring Security中有一些角色层次结构,如果你使用ROLE_A> ROLE_B然后ROLE_A将拥有ROLE_B拥有的所有授权
所以这里有两种选择:
1。对于每个用户及其后代都有一对像。用户的ROLE_USERi和后代的ROLE_USERiDESC。您将有 ROLE_USERi> ROLE_USERiDESC 强>
但是(因为我不知道你的组织结构图)这可能是不够的,因为可能有很多这些对!不知何故,如果你的树有两个或三个级别(ROLE_USER最多只有一个或两个级别),那么它是合适的,因为角色越高,它的权限就越多。
在我的项目中(偶然相似)我做了另一个选择。我有一些基本行为的基本角色。我有一个“照顾小组”,照顾者可以观察其后代数据
为什么我会这样做?因为我必须为某些行动(比如编辑,删除,访问某些敏感数据......)和关怀群体进行观察。
如果A是B的看护者,它可以观察B的数据,但A不能做任何超出其权限的事情
顺便说一句,它尚未经过全面测试,您可能会找到另一种可能的解决方案。
另见:
答案 1 :(得分:1)
当我们谈论Spring Security时,Spring提供了两件事。 1)角色管理 2)ACL(域级权限) 我认为你需要的是域级权限。
如果您计划使用角色管理,则通过为每个用户创建相应的角色,数据可能会增长。 第二个选项是使用域级权限(spring ACL),这是运行时授权的良好框架。您可以将其用于基于注释的授权,但管理API非常有限(BasicLookupStrategy),因此在使用之前请先阅读文档。