Spring Security中的动态角色层次结构

Spring Security中的动态角色层次结构

问题描述:

我无法相信我发现定义角色层次结构的所有内容都是一些奇怪的“>”赋值的.xml表示法。必须有一种方法可以从数据库定义的角色层次结构中创建RoleHierarchy对象。?!Spring Security中的动态角色层次结构

我在想,有列的表格:

  • ROLE_ID
  • child_role_id

定义多到很多角色和角色之间的关系,他说:这角色有哪些孩子?我认为我更喜欢孩子,而不是父母,因为这是在.xml文件中设置层次结构的方式:ADMIN> USER,USER> VISITOR。

(这顺便说让我不知道该标准的实施还支持之类的管理>用户,游客含义用户和访客都“在同一水平上”。)

现在,如果我要打电话

roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities())); 

我需要一个RoleHierarchy实现对象。 spring-security提供了一个,但setter只接受这个奇怪的字符串表示。我真的不想将我的数据库结果转换为字符串表示,而是使用某种树结构。

所以唯一的办法似乎是扩展实现并编写自己的setter来与我的数据库结果集一起构建rolesReachableInOneStepMaprolesReachableInOneOrMoreStepMap

还是有人知道一个不同的解决方案?

感谢您的任何指示或确认!

+0

在扩展Spring的实现和编写自己的setter方面有什么问题?我没有看到任何。 – bluefoot

+0

是的,我实现了我自己的RoleHierarchy版本。但我仍然想知道这种奇怪的String格式。我想没有其他选择了。 – Pete

+0

这有点晚,但是你想知道的是spring-security 4.0.0的作品。即A> B,A> C – allancth

我们想出了我们自己的解决方案,通过执行RoleHierarchy,解析UserDetailsService中的层次结构,并使用RoleRole之间的m:n自引用关系。 层次结构因此保存在数据库中,在应用程序启动时缓存,在需要时更新,并在登录时创建UserDetails对象时用于解析所有GrantedAuthorities