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来与我的数据库结果集一起构建rolesReachableInOneStepMap
和rolesReachableInOneOrMoreStepMap
。
还是有人知道一个不同的解决方案?
感谢您的任何指示或确认!
答
我们想出了我们自己的解决方案,通过执行RoleHierarchy
,解析UserDetailsService
中的层次结构,并使用Role
和Role
之间的m:n自引用关系。 层次结构因此保存在数据库中,在应用程序启动时缓存,在需要时更新,并在登录时创建UserDetails对象时用于解析所有GrantedAuthorities
。
在扩展Spring的实现和编写自己的setter方面有什么问题?我没有看到任何。 – bluefoot
是的,我实现了我自己的RoleHierarchy版本。但我仍然想知道这种奇怪的String格式。我想没有其他选择了。 – Pete
这有点晚,但是你想知道的是spring-security 4.0.0的作品。即A> B,A> C – allancth