2011-09-21 147 views
2

我無法相信我發現定義角色層次結構的所有內容都是一些奇怪的「>」賦值的.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

回答

1

我們想出了我們自己的解決方案,通過執行RoleHierarchy,解析UserDetailsService中的層次結構,並使用RoleRole之間的m:n自引用關係。 層次結構因此保存在數據庫中,在應用程序啓動時緩存,在需要時更新,並在登錄時創建UserDetails對象時用於解析所有GrantedAuthorities

相關問題