2015-11-24 147 views
1

我不是Spring 4的新手,但我是Spring Security 4 ACL的新手。我剛剛在我的MVC web-app上實現了Spring Security 4,這些都是後端Web服務。一個鏈接,我做了什麼張貼在這裏:Spring Security 4 ACL爲用戶和角色分配權限

http://stackoverflow.com/questions/33787085/spring-security-4-with-third-party-authentication-token 

而這增加了我的URL的安全性,只有具有特定角色的用戶可以請求一個URL。這很棒!我們使用SiteMinder示例,而不是傳回用戶名,而是在請求標頭中回傳令牌。我們打電話給OpenAM傳遞這個令牌,我們找回一個用戶名。我們使用Hibernate Authentication從我們的數據庫獲取用戶信息,我們爲該用戶獲取角色,併爲我們製作UserDetails,並以這種方式爲這個經過身份驗證的用戶提供SecurityContext。

但現在我正在接受一個新的挑戰,在同一個MVC網絡應用程序中,那就是我想爲我的對象添加ACL安全性。我已經做了大量的研究,將來會有更多,我還有幾個問題。

看來我可以在ACL表中應用安全性(創建和/或檢索和/或刪除和/或更新和/或等等)。我想知道是否有可能應用安全是這樣的:

userA SomeCarObject  has permissions (create,read,update) 
userB SomeCarObject  has permissions (read) 
roleA SomeCarObject  has permissions (update) 
roleB SomeCarObject  has permissions (delete) 

所以,既可以在用戶和角色都有不同的權限,一個對象?

我們有三種不同的對象類型:汽車,動物,花朵 我們希望使用ACL爲用戶和角色分配不同的權限,以滿足這些對象類型的每一種。

這可以用Spring Security 4中的ACL來完成嗎?你知道有哪些好的例子嗎?或者,我們是否必須擁有所有用戶權限? 因此,如果我們有3個用戶的角色,那麼我們需要在acl表中有3個條目,每個用戶有一個條目?這就引出了問題......如果用戶改變角色,那麼我們將不得不重新評估他們的權限,我們可能需要添加或刪除ACL表中的記錄?

我也在看如何權限的工作。我們現在在舊系統中使用一個位掩碼來跟蹤權限,所以我們有recursiveRead(1),read(2),write(4),delete(8),create(16),upload(32),關閉(64)等等。似乎我們可以擁有32位許可,這對我們來說非常有用。

所以,我正在看我們如何在ACL中定義這些權限。

隨着我獲得更多信息,我一定會在此發佈。謝謝!

回答

2

那麼,一個用戶和角色都可以有不同的權限到一個 對象?

是的,Spring Security中有一種叫做Sid的安全標識,它可以是權限(角色)或主體(用戶)。

假設你使用一個類似的參考文檔數據庫模式,您ACL_SID表應該是這個樣子:

+----+-----------+-------+ 
| id | principal | sid | 
+----+-----------+-------+ 
| 1 | true  | userA | 
| 2 | true  | userB | 
| 3 | false  | roleB | 
| 4 | false  | roleB | 
+----+-----------+-------+ 

然後你在ACL中添加條目時使用的ID從該表。

這引出了一個問題...如果用戶更改角色,那麼我們將 不得不重新評估他們的權限,我們可能需要從ACL表添加或刪除 記錄?

這應該不是必需的,但要注意緩存。如果您在ACL表中添加/刪除記錄,請記住清除AclCache(如果使用的話)。

我也在看如何權限的工作。

默認權限在BasePermission類中定義並使用位掩碼模式。但是請注意,Spring Security ACL實現而不是在相同的ACL條目上處理多個權限;這意味着您必須添加一個條目來創建,一個用於讀取,等等。

+0

太棒了!感謝您的信息。我會讓你知道結果如何。 – tjholmes66