簡體   English   中英

根據用戶權限過濾特殊結果的策略

[英]Strategy for filtering special results based on user permission

假設我有一個管理敏感數據的應用程序,例如客戶的健康記錄。 在取得了很大的成功后,我吸引了許多客戶 - 其中一些是名人。 我現在有很多員工使用這個應用程序。 但是,我想通過允許特權賬戶經理訪問“着名”人員的記錄來保護所述“名人”的身份。

此應用程序的數據存儲在已經發展多年的關系數據庫中。 “客戶”表有一個“着名”欄目,用於表示名人記錄; 'users'表有一個'特權'列,表示員工可以訪問名人的記錄; 假設兩者都是布爾值。

我可以掠奪整個數據層,添加所有查詢的where子句; 我還必須開始發送一個標志,指示用戶是否“特權”。 這是一項艱巨的任務,但還有另一種選擇嗎?

我正在尋求一般性建議,但我的應用程序是在Java平台上編寫的。

更新:我所熟悉的基於角色的訪問控制和用戶如何,組,角色,權限,權利等,很好的標准化方式可以擺出來,但目前還不是一個選項。 更有可能的是,我將重構和調整當前系統以使用Spring Security等框架。

這里的一般情況是不同的用戶需要訪問不同的客戶端。 根據我的經驗,這最好使用角色來實現。 可以為不同的用戶分配不同的角色。 對數據的訪問將映射到角色。

在您的情況下,您可能擁有經理角色和員工角色。 經理可以訪問所有記錄。 員工只能訪問不太敏感的記錄。 可以通過數據庫中的表來管理此關聯:例如,role,user_role和client_role。 user_role將用戶映射到角色,client_role將定義哪些角色可以訪問客戶端信息。

我會謹慎地添加你描述的“着名”專欄。 危險在於,隨着新業務規則的出現,您將發現自己需要更多列,並在數據層中使用新代碼來實現此邏輯。 當您通過角色管理訪問權限時,您就擁有了一種通用機制,即使在短期內可以進行更多工作,也可以更具可擴展性。

一般性問題的一般答案:研究RBAC(基於角色的訪問控制)。 在Java中,您可以擁有一些已分配角色的用戶類。 每個角色都有一組特定權限(可以是枚舉)。 然后,在每個受保護的操作之前,您必須檢查當前用戶是否具有相關權限。

我認為你走的是正確的道路:安全是一個跨領域的關注點,需要以某種方式集中的“方面”。

要具體回答你的問題,你應該去一個框架+標簽庫 ,你提到的那個,Spring Security是一個完美的選擇,從長遠來看將付出代價。 由於Spring包含AspectJ,您可能還希望使用面向方面編程 (AOP)來集中某些方面。

但是你仍然需要引入角色和權限概念 ..請參閱這篇好文章。

暫無
暫無

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

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