2013-03-19 170 views
3

對於具有高度複雜訪問控制規則的Web應用程序,您是否總是使用ACL?是否始終需要ACL?

在確定我的用戶的權限,我有考慮衆多,包括:

  • 他們是否登錄?
  • 他們是管理員還是普通用戶?
  • 他們瀏覽圖中的一個節點嗎?
  • 他們瀏覽什麼類型的節點?
  • 它們與節點的關係(即到節點的路徑)是什麼?
  • 用戶的默認設置是什麼?
  • 什麼是節點的默認設置?
  • 將用戶連接到節點的圖形邊緣的設置是什麼?

開發一個ACL被證明是困難的。過了一段時間,我採取了「如果/然後」檢查每個動作頂部的基本屬性,例如, if(isAdmin) {...}

這似乎工作正常,我想知道我是否應該留下它作爲一個永久的解決方案。因此,問題是:訪問控制的複雜性是否超過了ACL?還是僅僅是我需要嘗試一下?

回答

7

當您的訪問控制模型變得過於複雜時,因爲訪問不再僅僅基於用戶的身份,您希望移動到另一個訪問控制模型。

您可以使用基於角色的訪問控制(RBAC),其中權限分爲角色和角色分配給用戶。 Active Directory和其他LDAP產品可讓您執行基於角色的訪問控制。

但是,如果您想要實現的不僅僅是角色,特別是要考慮關係,圖形和圖形邊緣,則需要使用基於屬性的訪問控制(ABAC)。在基於屬性的訪問控制中,您可以實現授權邏輯,該邏輯考慮用戶屬性(角色,部門,地點,年齡,公民身份等)以及資源屬性(節點在圖表中的位置,邊緣... 。)以及節點和用戶之間的關係。

我在ABAC上傳了一個視頻:www.youtube.com/watch?v=xUEbBKnxWSo CERIAS也有一些很棒的:www.youtube。com/watch?v = 3ZCoupGHmwo

今天實現ABAC的主要標準是XACML,即可擴展訪問控制標記語言。我會研究XACML(免責聲明 - 我爲Axiomatics,一家XACML供應商工作)。

您可以簽出供應商和開源XACML實現。

使用XACML,而不是使用一堆if(isAdmin)和if(validCitizen)語句,最終得到一個if(isAuthorized())語句。實際授權邏輯集中在用XACML表達的策略中。這也被稱爲外部授權。

+0

哇大衛,這是一個聳人聽聞的答案!非常感激! – 2013-03-20 20:49:18

+0

謝謝,很高興提供幫助。 – 2013-04-03 14:18:58

1

首字母縮寫詞ACL代表訪問控制列表。因此,根據定義 - 只要您基於哪個用戶或哪個用戶組控制了哪些用戶可以訪問哪些用戶,就可以使用ACL。

所以第一個問題的簡短答案是,是的,你總是使用ACL。

至於其他的問題,我會說是他們兩個

的ACL可以變得比它的控制應該需要應用更復雜 - 比如你想太細了用戶的操作控制。所以,如果你認爲它變得複雜 - 看看你是否能夠通過將一些ACO組合在一起甚至刪除它們(並允許所有用戶訪問它們)來「稍微」降低它。