Spring Security 中的动态角色层次结构
我不敢相信我发现定义角色层次结构的只是一些奇怪的 .xml 符号“>”作业。必须有一种方法可以从数据库定义的角色层次结构创建 RoleHierarchy 对象。?!
我正在考虑一个包含以下列的表:
- role_id
- child_role_id
定义角色和角色之间的多对多关系,说:哪个角色有哪个孩子?我想我更喜欢孩子而不是父母,因为这就是在这些 .xml 文件中设置层次结构的方式:ADMIN >用户,用户>游客。
(顺便说一句,这让我想知道标准实现是否也支持 ADMIN > USER、VISITOR 之类的内容,这意味着 USER 和 VISITOR 处于“同一级别”。)
现在,如果我想调用,
roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities()));
我需要一个 RoleHierarchy 实现对象。 spring-security 提供了一个,但 setter 只接受这种奇怪的字符串表示形式。我真的不想将数据库结果转换为字符串表示形式,而是使用某种树结构。
因此,唯一的方法似乎是扩展实现并编写我自己的设置器来使用我的数据库结果集来构建 rolesReachableInOneStepMap
和 rolesReachableInOneOrMoreStepMap
。
或者有人知道不同的解决方案吗?
感谢您的指点或确认!
I can't believe all I find to define role hierarchies is some strange .xml notation of ">" assignments. There has to be a way to create a RoleHierarchy object from a database defined role hierarchy.. ?!
I'm thinking of a table that has the columns:
- role_id
- child_role_id
defining a many-to-many relationship between Role and Role saying: which role has which children? I think I'd prefer children over parents as that's the way the hierarchy is set up in those .xml files: ADMIN > USER, USER > VISITOR.
(This by the way makes me wonder if the standard implementation also supports things like ADMIN > USER, VISITOR meaning USER and VISITOR are "on the same level".)
Now if I want to call
roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities()));
I need a RoleHierarchy Implementation object. spring-security provides one but the setter accepts only this weird string representation. I don't really want to transform my database results into a string representation but rather work with some kind of tree structure.
So the only way seems to be extending the Implementation and writing my own setter to work with my database result set to build the rolesReachableInOneStepMap
and rolesReachableInOneOrMoreStepMap
.
Or does anyone know of a different solution?
Thanks for any pointers or confirmation!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们通过实现
RoleHierarchy
、解析UserDetailsService
内部的层次结构并使用Role
和Role
之间的 am:n 自引用关系,提出了自己的解决方案。代码>角色。因此,层次结构保存在数据库中,在应用程序启动时缓存,在需要时更新,并在登录时创建 UserDetails 对象时用于解析所有
GrantedAuthorities
。We came up with our own solution by implementing
RoleHierarchy
, resolving the hierarchy inside theUserDetailsService
and using a m:n self referencing relationship betweenRole
andRole
.The hierarchy is thus saved in the database, cached at application launch, updated when needed and used to resolve all
GrantedAuthorities
when creating a UserDetails object on login.