java - 层次树角色的 Spring Security/Java EE 解决方案

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

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

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

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

最佳答案

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

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

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

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

另见:

  • Spring Security 3.1.x Documentation

https://stackoverflow.com/questions/11404968/

相关文章:

java - 如何在 Hibernate 中使用临时表批量删除记录?

java - 在单元测试运行期间禁用某些方面

java - 在没有 Spring 身份验证的情况下通过 web-socket 多次回复

java - QueryDsl 对 Map 字段键的 Web 查询

java - 为什么 PropertyDescriptor 行为从 Java 1.6 更改为 1.7

java - 我可以在 View 层中找到 spring mvc Controller 的 URL

java - Spring @Transaction 未启动事务

json - 如何在 Spring Boot Actuator 的 Trace 中包含 JSON 响

java - 在哪里以及如何处理 spring+hibernate 异常?

eclipse - 从 Eclipse 运行 Spring JUnit 测试时将/src/main/