簡體   English   中英

彈簧安全 - 動態角色

[英]spring security - dynamic roles


我的應用程序中有一個用戶需要按類別公開某些數據。
例如:
具有ROLE_CAMPAIGN的用戶A只能看到WHERE campaign _category_id = 5
用戶b與ROLE_CAMPAIGN只能看到WHERE 廣告系列 _category_id IN(5,10,4)
(選擇,插入,更新,刪除)

用戶和Campaign是hibernate實體。
他們的連接是ManyToMany(用戶有CampaignsCategories)
如果我將其翻譯為本機 SQL

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

等等。

為具有某個角色的用戶實現動態的正確方法是什么。

小例子會有所幫助。

(春季安全3)

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

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

如果您發現安全決策不符合此條件,則需要重新定義角色以使其更加精細。

看起來您可以使用訪問控制列表(ACL)來解決此問題:2名員工具有相同的ROLE_EMPLOYEE並且無法執行管理員可以執行的操作,但在該范圍內,他們不允許查看或刪除彼此的記錄。
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.html shoud給你一個更好的主意。

通常,RBAC不能為每個受控實體提供不同的權限。 RBAC是二維的 - 權限X ROLE。 通常沒有任何機制可以測試哪些內容受到控制。 您可以使用RBAC來實現這一目標,但是需要很多ROLES才能完成,並且一些自定義並且您最終還是會創建ACL。

另一方面,ACL本質上是3維的 - 權限X ROLES X對象都可以在完整集或部分集中相互定義:

權限X ROLE X對象(完整的ACL)權限X ROLE(RBAC)ROLE X對象(有用?)權限X對象(有用?)

兩個ACL和RBAC允許為人們分配不同的ROLES。 MOST RBAC不允許以任何其他方式分配權限。

但是,許多ACL能夠直接向特定對象/實體的人員分配權限。 如果這是ACL的一個特性,它會增加復雜性和速度損失的大量靈活性。 只為一個人創建一個ROLE就好了。 因此,不要直接將權限分配給人員。

你的問題主要是你沒有區分ROLES的類型,但RBAC不會為你做這件事。 您應該使用ACL。 如果您可以設置表格顯示權限與ROLE和ROLE vs對象,您將保持更長時間的理解。

最好的ACL具有的另一個元素:對象組。 這就是您需要批量處理或“隨時隨地”分配權限。 您的廣告系列的創建代碼將按類別預先分配組,然后ROLES和權限將自然發生。

角色不是您正在尋找的答案。 訪問控制列表是Emanuel所述問題的解決方案。 配置為使用角色時,Spring安全性無法在本機上區分具有相同角色的兩個用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM