15

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

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

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

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

4

2 回答 2

6

由于我已经在这个主题上工作了一个月,所以我可以给你这个问题的答案,但是可能会有更好的答案。
Spring Security 中有一些角色层次结构,如果您使用 ROLE_A > ROLE_B 那么 ROLE_A 将拥有 ROLE_B 拥有的所有授权。
所以这里有两个选择:

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

2. 在我的项目中(意外地非常相似)我做了另一个选择。我有一些基本动作的基本角色。我有一个“关怀小组”,一个照顾者可以在其中观察其后代的数据。
我为什么要这么做?因为我必须为某些操作(如编辑、删除、访问某些敏感数据和......)和关心小组负责观察。
如果 A 是 B 的照顾者,它可以观察 B 的数据,但 A 不能做任何超出其权限的事情。

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

也可以看看:

于 2012-07-10T05:08:35.813 回答
1

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

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

于 2015-04-22T10:36:00.240 回答