漫談權限系統之基于ACL的實現

          基于ACL的實現

          ACL介紹

                 ACL全稱Access Control List,在ACL中,包含用戶(User)、資源(Resource)、資源操作(Operation)三個關鍵要素。通過將資源以及資源操作授權給用戶而使用戶獲取對資源進行操作的權限,模型如下圖所示:

          acl.JPG
          圖表
          1 ACL模型

          實現方案

                 通過上面對ACL模型的介紹,可以看出ACL是個簡單的模型,但其并未提出對于權限的繼承、權限的排斥和包含的解決方案。

                 ACL模型得到接受必然也是有它的理由的,現在來看看基于ACL模型如何來實現授權模型和權限校驗部分。

          l         授權模型

          授權模型遵循ACL模型進行搭建,建立ACL介紹中的模型。

          針對授權模型中的幾個關鍵部分進行描述:

          n         授權

          根據ACL模型,授權動作主要經過以下幾個步驟完成:

          u       配置系統資源和資源的操作

          按照模型維護ResourceOperation實體以及ResourceOperation的關聯模型即可實現。

          u       授予用戶能操作的資源和資源的操作

          按照模型維護用戶與Resource以及Operation的關聯即可實現。

          n         權限的繼承

          ACL模型中未定義權限的繼承,這也是由于在ACL的模型中根本就沒有權限繼承的點,因為用戶本身是不可能繼承的。

          在很多改良的ACL模型系統中,會通過給組或組織機構授權來完成,這時就出現了權限繼承的點了,如組或組織機構的權限繼承,那么在ACL模型中如何去實現這個權限繼承呢?

          為實現給組或組織機構進行授權,此時通常需要對上述ACL模型進行改造方可實現,模型重構如下:

          acl2.JPG
          圖表
          2 重構后的ACL模型

          在對組或組織機構進行授權動作時,經過以下步驟來實現權限的繼承:

          u       維護當前組或組織機構中所有用戶的ACL模型

          維護當前組或組織機構和ResourceOperation的關聯模型。

          遞規獲取當前組或組織機構的父節點的ACL模型,并合并形成新的ResourceOperation關聯列表,此時獲取該組或組織機構中的用戶產生用戶和ResourceOperation的關聯ACL模型。

          u       維護當前組或組織機構中所有下級節點中的所有用戶的ACL模型

          遞規獲取當前組或組織機構的子節點,同時合并形成子節點新的ResourceOperation關聯列表,之后獲取子節點中的用戶產生新的ResourceOperation關聯列表。

          在經過以上的步驟后權限的繼承得以實現,在使用過程中同時發現另外一個問題,在更新組或組織機構下的用戶時需要同時維護當前組或組織機構的ACL模型,否則會造成不同步的問題。

          n         權限的排斥和包含

          權限的排斥和包含在ACL模型中同樣沒有定義,通常的實現方法是定義Operation的自關聯,維護時需增加對Operation自關聯的維護以及在維護UserResourceOperation關聯時根據Operation的自關聯產生其包含權限的ACL列表。

          l         資源權限校驗

          在以上授權模型的基礎上,對于操作主體能否對資源進行操作權限的判斷通過ACL列表直接判斷用戶是否具有對資源進行操作的權限即可。

          通常在中小型系統的做法是在用戶登錄時獲取構成用戶的ACL列表,以提升資源權限校驗的效率。

          l         數據權限校驗

          ACL模型中未明確定義數據權限校驗的實現,根據數據權限校驗的需求將數據映射為Resource,對數據的操作映射為Operation,這個時候數據權限的授權模型重構為:

          dataacl.JPG
          圖表
          3 數據權限的ACL模型

                 基于此模型對數據權限的授權和權限校驗進行描述:

          n         授權

          在對數據進行授權時根據模型此時的授權對象主要有UserGroup兩種,授權時需要通過以下步驟來完成:

          u       維護數據本身構成的ACL模型

          維護當前數據、操作與GroupUser的關聯模型。

          遞規獲取當前數據、操作的父節點的GroupUser的關聯模型,合并組成新的GroupUser列表,根據此列表形成對當前數據進行操作的用戶列表,此時更新形成UseràResourceàOperationACL列表模型。

          u       維護數據所有子節點的ACL模型

          遞規獲取數據的所有子節點,同時對合并形成每個子節點的新的GroupUser列表,更新子節點的UseràResourceàOperationACL列表模型。

          在經過以上的步驟后數據權限的繼承以及需求得以實現,在使用過程中同時發現另外一個問題,在更新組或組織機構下的用戶時需要同時維護當前組或組織機構的ACL模型,否則會造成不同步的問題。

          n         權限校驗

          u       獲取操作者權限范圍內的全部數據

          直接通過UseràResourceàOperationACL列表獲取所有數據。

          u       分頁獲取操作者權限范圍內的數據

          直接通過UseràResourceàOperationACL列表分頁(結合數據庫的分頁技術)獲取數據。

          優缺點分析

                 經過上述實現方案的描述,可以看出基于ACL的實現的優點主要在于:

          n         易用和高效的權限校驗

          在進行資源和數據的權限校驗時只需通過通過ACL列表即可實現。

                 缺點在于:

          n         權限的繼承

          對權限繼承不夠支持。

          n         復雜和低效的授權方式

          在進行資源和數據的授權時非常復雜,特別是在加入權限的繼承、排斥和包含后,需要在維護本身ACL列表的同時維護所有子節點的ACL列表,導致效率低下。

          posted on 2005-10-13 18:13 BlueDavy 閱讀(5856) 評論(1)  編輯  收藏 所屬分類: Java系統設計

          評論

          # re: 漫談權限系統之基于ACL的實現 2014-09-19 11:32 淘氣精靈


          學到不少東西,值得贊一個!  回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 双江| 莆田市| 莱西市| 东港市| 宣化县| 井研县| 铜山县| 凌云县| 佛教| 浮梁县| 达孜县| 若羌县| 遂平县| 连州市| 福泉市| 北碚区| 鄯善县| 新晃| 岳普湖县| 保亭| 共和县| 蒙自县| 沂南县| 永安市| 皋兰县| 盐源县| 旌德县| 曲靖市| 宝应县| 搜索| 伊川县| 河北省| 黄石市| 洛川县| 无锡市| 铜陵市| 黄冈市| 十堰市| 新田县| 新乡县| 汶川县|