2011-08-04 216 views
2

我正在使用新的Spring Security 3.1,並向Spring Security ACL提出了一些問題。春季ACL問題

  1. 所以我們假設我有一個對象並且想爲它定義一個ACL。我創建一個ACL條目,並希望將其分配給一組用戶;不是角色(GrantedAuthoritySid),不是一個用戶(PrincipalSid),而是一組用戶。我爲了一個例子而到處研究,但是找不到任何東西。你可以請我指點一個例子或在這種情況下幫助我的班級嗎?

  2. 所以現在我想創建第二個對象,它與第一個對象(它應該適用於相同的用戶)有關。 例如,這可能是第一個對象的狀態更新。我的GrantedAuthorityPrincipal對第二個對象具有不同的權限掩碼。 另外第一個對象有2 GrantedAuthorities(2 ACLEntries),並且狀態更新只有一個。如果我使用ACL繼承,第一個對象的permision集合與第二個對象的permision集合不匹配。 我的問題是如何建模,以便兩個對象的GrantedAuthorities自動保持一致,同時保留不同的permision遮罩。一個想法是使用複合模式鏈接第一個對象的GrantedAuthority上的第二個對象的GrantedAuthority(而不是將其鏈接到用戶)。

  3. ACL擁有一個所有者。業主是什麼?它爲ACL或ACL條目起什麼作用?

回答

1

這有點複雜。我反向設計了Spring源代碼來理解原理,並花了我很多時間。我不能完全告訴你我是如何實現它的(因爲它對於我正在進行的項目非常具體),但會嘗試給你一個起點。

我所做的是:

  • 實現自定義org.springframework.security.acls.sid.Sid。這個Sid引用不是authorityuser,而是一種具有id並引用兩個不同對象的組對象。要使用此組對象作爲Sid,您必須創建一個ACL_Sid - 將對象的id記錄爲ACL_sid.sidACL_sid.principal必須是0或1以外的整數,必須在自定義LookupStrategy(參見下文和Spring源代碼)的測試中進行檢查。
  • 延伸org.springframework.security.acls.sid.SidRetrievalStrategyImpl從數據庫檢索自定義Sid's。
  • 實施自定義org.springframework.security.acls.jdbc.LookupStrategy。我複製了一個現有的實現(因爲該類是最終的),並根據我的需要對其進行了修改。
  • 有線一切融合在一起的春天配置,因爲默認的春天ACL配置需要沒有哪個班就不得不使用(而不是默認值)

看春源代碼,看看它是如何做。

0

要將一個對象分配給一組用戶,每個用戶對於同一個對象應該有一個ACL條目。這可能會導致大量的ACL記錄。

+0

這就是爲什麼我們要 – fvisticot