2014-02-14 97 views
0

我正在開發一個使用MongoDB的項目,我有一個場景,以便可以根據角色限制數據對用戶的可見性,例如,如果我有一個文檔形式:定義自定義授權策略的最佳方法

{ 
    "testme1":"fooo", 
    "testme2":"foobar" 
} 

與作用「admin」的用戶可以同時看到「testme1則」和「testme2」,而「客人」只能看到「testme2」。什麼是動態定義這些授權規則的最佳方式,以便我的包裝API只應按照規則獲取數據。我的做法是給用戶一個web「UI」來定義一個規則,並根據他的聲明在我的服務器中保存一個「XML」文件。請讓我知道,如果有人有一個更好的想法,也如果他們是一些數據庫級別的方法來做到這一點

回答

1

有一個授權標準存在,您可以用它來定義您的授權策略。這個標準被稱爲XACML,即可擴展訪問控制標記語言。它實現了一種稱爲基於屬性的訪問控制(ABAC)的授權模型。您可以在這兩個議題在這裏讀了起來:

XACML定義與概念的架構:

  • 政策決策點(PDP),
  • 政策執行點(PEP),和
  • 政策信息點(PIP)。

在典型的流程中,PEP保護您的數據/服務/ API。 PEP會向PDP發送授權請求:

  • 用戶Alice是否可以查看記錄#123?

PDP將轉到PIP以檢索缺失的屬性,例如用戶的角色和許可以及資源屬性,例如數據的敏感性,白名單或黑名單...基於新的信息,PDP可以做出決定:許可證Deny。訪問被允許或阻止。

使用XACML,授權策略的豐富性沒有限制。我爲一家實施XACML的公司Axiomatics工作,我們的解決方案用於製造業,醫療保健和銀行業務,以動態方式保護對敏感數據的訪問(例如管理人員可以編輯他們擁有的文檔)。

XACML支持集中管理的外部授權。它還使我喜歡稱之爲任何深度授權這意味着您可以將XACML應用於Web API,業務邏輯,演示文稿UI以及數據庫。

HTH

+0

Barbarossa是他們能爲我的規則生成XACML文件的好工具嗎? –

+0

另外我的場景並不是讓決定​​像許可證一樣,或者拒絕,但是如果用戶根據角色被授予訪問權限,就可以做出決定,比如「連接哪些列」,這種情況是否可以通過XACML來解決 –

+0

您可以實現「反向查詢「用XACML。我打電話給反向查詢問題,例如「我能做什麼?」或「誰可以查看這些資源?」或者在你的情況下「我可以顯示哪些列?」 –