2015-01-14 45 views
0

我們已經爲隱式和顯式角色設置了基於角色的身份驗證和角色層次結構的spring安全項目。我們還需要根據域對象的狀態提供不同的授權。例如:Spring安全ACL - 域狀態更改

訂單域對象:

  • 下訂單時在初始狀態
    • 字段1,2,3是由RoleA編輯,並通過RoleB
    • 字段4,5可見, 6是由RoleA和角色乙編輯
  • 當訂單在QA狀態
    • 字段1,2,3是由RoleA可見,並且通過RoleB
    • 字段4,5,6由角色A的可視和RoleB
  • 下訂單時在完成狀態
    • 字段1可編輯,圖2,圖3是由RoleA可見的,並且可查看由RoleB
    • 字段4,5,6是由RoleA和RoleB

標準彈簧安全可視我們使用ant匹配器的URL級別的安全性不足以處理授權要求,因爲如果它們處於任何狀態,相同的服務URL將用於查看(GET)並保存(PUT)訂單域對象。我們還希望讓流程可配置爲每個權限集中的哪些字段。

春季域對象的安全看起來像它適用於其中的狀態下被固定或恆定域對象 - 由特定用戶創建的博客文章,等...
可這一要求被春域處理的對象安全,或這應該更好地處理自定義代碼/配置?

回答

0

你是非常正確的。 Spring Security權限評估程序和ACL基礎結構適用於域對象級別,而不是字段級別。你可以創建像EDIT_FIELD1,EDIT_FIELD2,VIEW_FIELD1等權限,但它感覺一點點強制。當然,您可以使用其他Spring Security基礎結構和@PreAuthorize註釋等,並使用您的自定義代碼進行擴展。

如果您對用戶有一定的信心並且被允許放鬆安全性,我會建議跳過現場級別,並且只對訂單狀態和角色進行評估。你可能想要一些審覈日誌記錄誰在編輯什麼。字段可以在用戶界面中變暗以避免意外編輯。我已經看到了工作流應用程序的功能。

+0

感謝holmis,我並沒有去個別領域的水平,而是看着一小羣領域。您提出了我們將擁有的審計線索的一個好點。我還計劃在調光領域。因爲這是一個內部應用程序,並且我們有審覈和暗淡的字段,所以我們不需要URL上額外的安全級別 – Vince