我試圖在Spring安全性中推出自己的自定義ACL系統,該系統比默認的ACL系統更適合我的項目。我的問題是這樣的:Spring Security的ACL(訪問控制列表)如何處理每個OBJECT_IDENTITY具有多個權限的主體?
Spring Security提供的默認ACL實現如何處理每個域對象具有多個權限(OBJECT_IDENTITY)的單個主體對象(SID),而不會混淆數據庫?
文檔狀態:"ACL_ENTRY stores the individual permissions assigned to each recipient. Columns include a foreign key to the ACL_OBJECT_IDENTITY, the recipient (ie a foreign key to ACL_SID), whether we'll be auditing or not, and the integer bit mask that represents the actual permission being granted or denied. We have a single row for every recipient that receives a permission to work with a domain object."
所以ACL_ENTRY基本上是用戶具有權限的單個域對象的單個主體用戶之間的連接表,和。
好。然而;在控制器層上,可以在單個對象上執行多個CRUD方法。如果一個用戶有權更新和刪除一個對象,但是另一個用戶只有創建和讀取對象的權限(例如)。默認的Spring ACL系統是否在數據庫中存儲一個EACH和每個權限的主體用戶和域對象之間的權限?例如,Joe有權讀取此對象。行+ = 1. Joe也有權寫入此對象。行再次= 1,依此類推。
如果它能以這種方式實現我的自定義卷展欄,那麼因爲我擔心在數據庫中爲每個對象,每個主體添加多個權限(您可以看到如果一個主體讀取,寫入,並且更新每個對象的權限,即每個用戶三行,獲得300個用戶,這就是900行,你可以看到這是一個指數問題)。
如果不是那麼這是如何工作的?謝謝。
非常感謝你的這個信息。我想深入瞭解一些你的觀點。 1)如此真或假?:內置的評估程序無法處理這種內置的蒙版,並且需要爲每個許可單獨劃分一行。因此,在所有實際情況中,使用默認的ACL仍然需要爲每個單獨的權限創建一個新的單行,即在事件1上爲用戶1的讀取權限進行行操作。在事件1上爲用戶1寫入權限的新行等。? –
@TylerDurden真(截至上次檢查)。 – holmis83
和2)組在這裏與'角色'不同嗎?在我的自定義實現中,我正在考慮執行類似以下操作的操作:而不是讀取,寫入,更新等,我將擁有更像角色的自定義「權限」:dog_owner和vet_medic。我的連接表將一個域對象與一個主體用戶結合在一起,幷包含上述「權限」之一。這些'權限'本質上會帶有諸如更新,讀取,刪除等配額。現在,在控制器方法檢查中,@preAuthorization表達式將檢查dog_owner或vet_medic。 I.E.更新需要vet_medic –