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

时间:2011-09-21 09:08:37

标签: dynamic spring-security hierarchy roles

我无法相信我发现定义角色层次结构的是一些奇怪的.xml符号“>”分配。必须有一种从数据库定义的角色层次结构创建RoleHierarchy对象的方法。?!

我正在考虑一个包含列的表:

  • ROLE_ID
  • child_role_id

定义角色和角色之间的多对多关系说:哪个角色有哪些孩子?我认为我更喜欢孩子而非父母,因为这是在.xml文件中设置层次结构的方式:ADMIN>用户,用户>来访者。

(顺便说一句,这让我想知道标准实现是否也支持ADMIN> USER,VISITOR等意味着USER和VISITOR“在同一级别上”。)

现在,如果我想打电话

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

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

所以唯一的方法似乎是扩展Implementation并编写自己的setter来使用我的数据库结果集来构建rolesReachableInOneStepMaprolesReachableInOneOrMoreStepMap

或者有人知道不同的解决方案吗?

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

1 个答案:

答案 0 :(得分:1)

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