2011-03-12 103 views
1


我在我的應用程序中有一個用戶需要按類別公開某些數據。
例如:與ROLE_CAMPAIGN
用戶A只能看到WHERE 運動 _category_id = 5
與ROLE_CAMPAIGN用戶B只能看到WHERE 運動 _category_id IN(5,10,4)
(選擇,插入,更新,刪除)彈簧安全 - 動態角色

用戶和Campaign是hibernate實體。
它們的連接是多對多(用戶具有CampaignsCategories)
如果我翻譯,要本地 SQL

SELECT * FROM CAMPAIGNS WHERE CATEGORY_ID IN (SELECT ID FROM USER_CATEGORIES) 

和和。

對於具有某種角色的用戶實現動態功能的正確方法是什麼?

小例子將有所幫助。

(Spring security 3)

+0

是用戶的屬性類嗎? – Ritesh 2011-03-12 18:28:35

+0

對不起,編輯帖子,這是一個活動的屬性 – fatnjazzy 2011-03-12 18:31:11

+0

如何配置Compaign?它是一個Spring bean嗎? – Ritesh 2011-03-12 18:34:08

回答

2

您正在尋找安全模型缺點的技術解決方案。

具有相同角色的人應具有相同的訪問權限。

如果您發現您的安全決定不符合此條件,那麼您需要將角色重新定義爲更細化。

+0

或者不使用角色來覆蓋這類訪問控制。 Spring Security可以做的不僅僅是RBAC,但是這是最好的支持形式。 – 2011-03-12 17:51:57

+0

@Donal:是的,我同意但是考慮到這個問題的性質似乎並不是OP正在尋找的東西,但也許是這樣。 – 2011-03-12 17:54:11

+0

那麼,對於如何實現這樣的棒狀結構,你有什麼想法。我的意思是,某個員工可以看到他自己的數據,但他是ROLE_EMPLOEE的情況非常普遍。我認爲春季安全涵蓋了這一點,這是一個安全問題。謝謝 – fatnjazzy 2011-03-12 18:23:57

0

角色不是您正在尋找的答案。訪問控制列表是伊曼紐爾所說的針對您的問題的解決方案。 Spring配置爲使用角色時的安全性無法在本地區分具有相同角色的兩個用戶。

0

通常,RBAC不能爲每個受控實體提供不同的權限。 RBAC是二維的 - 權限X ROLE。通常沒有任何測試哪些內容被控制的機制。你可能可以使用RBAC來做到這一點,但是這需要很多ROLES來完成,一些自定義和你最終會創建一個ACL。在另一方面

的ACL,固有地是3維 - 權限X ROLES X對象都能夠在整個範圍內套,或者部分相對於彼此被定義:

權限X ROLE X對象(ACL完全) 權限X ROLE(RBAC) 作用X對象(有用嗎?) 權限X對象(有用嗎?)

這兩個ACL和RBACs允許指定的人不同的角色。 MOST RBAC不允許以任何其他方式分配權限。

但是,許多ACL可以直接將權限分配給與特定對象/實體有關的人員。如果這是一個ACL的適應能力,它會增加很大的靈活性,從而導致複雜性和速度的巨大增加。僅僅爲一個人創建一個角色要好得多。所以,不要直接分配給人的權限。

你的問題很大程度上是你沒有區分角色的類型,但是RBAC不會爲你做到這一點。你應該使用ACL。如果您可以設置權限與ROLE以及ROLE與對象的表格顯示,則您的理解時間會更長。

最好的ACL還有另外一個元素:對象組。這就是你需要做批量或'隨着你去'權限的分配。您的Campaigns創建代碼將按類別預先分配組,然後ROLES和權限會自然發生。