2011-02-01 56 views
2

我正在開發一個GWT應用程序,它使用Spring Security來處理身份驗證。我的應用程序將有5個用戶,每個角色不同。哪個Spring安全ACL選項最適合分級權限

  1. 超級用戶 - 這是網站所有者,並已讀取所有內容的寫入權限。
  2. 學校老闆 - 這是擁有將使用該應用程序的學校的人。該用戶可以訪問他們所有的學校。
  3. 區域經理 - 這是網站所有者的員工,並且可以訪問該地區的學校。 (一個地區是一個學校的實體區域)
  4. 學校經理 - 管理某所學校,並且讀寫該學校的所有內容。訪問由學校老闆提供。
  5. 教師 - 只能閱讀和寫入學校經理分配給他/她的特定區域。

香港專業教育學院採取了看看不同的方式來實現這樣的安全模型,我使用Spring的安全解決這兩種方式之間徘徊,先有使用4數據庫ACL表作爲解釋這樣做的複雜的方式on denksoft blog

另一種方式是通過Spring安全性使用基於表達式的訪問控制表達式語言,它更加容易,不需要額外的數據庫表。

我的問題是,從我打算實現,哪個選項更好地使用,並會給更好的結果。我假設使用第一個選項(使用數據庫ACL表)提供更多的自定義。我來自RoR背景,想知道爲什麼我需要這麼多表來實現這一目標。 Expression語言選項是該場景的可行解決方案。如果有的話,是否有一個很好的起點/教程呢?建議非常感謝。

回答

3

在這種情況下,ACL可能會矯枉過正。

當授權檢查,春季EL應該足夠,例如:

@PreAuthorize("hasRole('ROLE_School-owner') or hasRole('ROLE_School-manager')") 

如果角色是分層的,然後事情就變得更容易,一旦你組角色,通過使用一個間接多個層次:

集團 「學校老闆」:角色ROLE_School所有者+ ROLE_School經理+ ROLE_Instructor

集團 「學校管理者」:角色ROLE_School經理+ ROLE_Instructor

然後,如果你需要檢查學校管理者的授權,你只需要檢查該角色:

@PreAuthorize("hasRole('ROLE_School-manager')") 

這也給權限組「學校所有者」的用戶,因爲該集團還擁有分配了校長的角色。