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

标签 java spring jakarta-ee spring-security security-roles

我知道 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 不能做任何超出其权限的事情。

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

另见:

关于java - 层次树角色的 Spring Security/Java EE 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404968/

相关文章:

java - 获取在 Spring 中实现通用接口(interface)的所有 bean

java - 如何使用外键在 Spring Data/JPA 中执行查询?

java - 这是 JOGL FPSAnimator 的正常异常吗?

java - Android Volley 循环响应

spring - Redis 与 Guava 缓存

java - 第二个自动连接的 REST 存储库不工作

java - 存储层是否应该始终由服务层封装?

jakarta-ee - 在 Tomcat7 中使用 javax.validation

java - 尝试使用 Hibernate 执行 SELECT 操作时出错

java - Android : Show a list of color previews and pass associated id from color. xml