2012-03-13 55 views
1

我正在創建一個Grails網站,用戶將有權訪問他們創建的資源。直到這裏,一切都清楚了。我定義了ROLE_USER並使用Config.groovy文件鎖定了我的控制器和操作。使用彈簧安全性的網站的組權限 - 設計查詢

我面臨的問題是我需要支持用戶組,以便用戶創建的一些資源可以被同一組的其他用戶編輯/更新/刪除。如何在春季安全中將用戶與「組」相關聯,我應該在這裏使用什麼設計/庫?

回答

1

您需要做的是讓用戶的角色(授權)來自數據庫。一旦出現這種情況,您就可以輕鬆調整用戶(或用戶組)的角色,並快速創建/刪除它們。這些文檔有關於如何從數據庫獲取角色的一些相當不錯的信息,所以我不會在這裏再介紹。

但是,一旦動態角色就位,您仍然需要能夠將角色連接到創建的對象。基本上有兩種方法可以去這樣做:

  1. 訪問控制列表
  2. 自定義邏輯

根據您所需要的粒度和你想要的靈活性,一個選擇可能是更有吸引力比另一個。

訪問控制列表實質上允許您在每個用戶和每個實體實例之間擁有權限映射。正如你可以想象的那樣,這是一個相當大的開銷,如果你有大量的實體和用戶,它可能表現不佳。

另一方面,將自己的邏輯放在一起更靈活,因爲您可以設置自己的方案來將實體實例或實體類連接到用戶及其角色。

1

我不認爲彈簧安全提供了這種功能,所以你將不得不手動。 對於您這種功能,在更新

def authenticateService 

def user = authenticateService.principal() 
entity.setUser(user?.getUsername()) 

然後保存當前登錄的用戶名在用戶/刪除位指示的方法,你應該檢查是否在用戶登錄的電流的作用,每個域類匹配 創建該實體的用戶的角色。如果你有一個匹配,你應該繼續進行更新/刪除,否則拋出一個異常 /重定向用戶到錯誤頁面

作爲角色,你可以使用彈簧安全角色,或者你可以在用戶對象上創建一個屬性已創建

+0

使用角色問題隨時有人啓動一個「組」一個新角色需要動態分配給這組用戶,這聽起來不可行。我有道理嗎? – Abe 2012-03-13 17:26:07

+0

我不確定我是否理解。在我看來,這是引入新角色時的正常程序,它應該分配給一些用戶。 – dimcookies 2012-03-13 17:59:05