2013-01-14 35 views
1

假設我有複雜的用戶管理系統。在這種情況下,用戶可以與組關聯,組可以與角色關聯。另外組可以包含其他組。JPA - 在提交之前如何檢查關係?

我假設在「賬戶管理」的情況下,當前用戶不能失去允許做「賬戶管理」過程的角色。我想知道如何實現該用例的最佳方式。

讓我們試着考慮簡單的情況: E.g.在下面的層次結構中,用戶通過組G3和G5與我們的角色連接。

---USER--- 
|  | 
G1  G3---- 
|  | | 
G2  G5 G6 
     | 
    REQUIRED_ROLE 

在G3組版中,有人嘗試更換G3組成員,例如七國集團(爲了簡化wihout角色)

---USER--- 
|  | 
G1  G3---- 
|  | | 
G2  G7 G6 

提交這一變化將刪除用戶hiererchy和用戶「賬戶管理」的角色將無法編輯帳戶。

我唯一的想法是將所有組和角色讀入內存,並嘗試手動更改所有依賴項以檢查角色在提交後是否仍然分配。但是這個解決方案可能會成爲未來潛在錯誤的來源,而且不夠優雅。 有沒有人有想法如何以優雅的方式解決它?

+0

是用戶編輯數據庫的人還是不同的用戶? –

+0

用戶登錄「玩」後整個系統和操作都會影響DB狀態。 – ggolebio

回答

0

因爲這是一個不平凡的用例,所以不能使用常規的完整性約束。您將必須執行預先提交觸發器來掃描層次結構並確定用戶具有所需的權限。如果不是,則拋出異常。