權限模型

           

          一.  概述

          幾乎在所有的系統中對于權限控制都有直接的需求,而這類需求往往有其相似性,綜合常見的對于權限系統的需求構成了本文檔,文檔主要從功能復用以及模型復用的角度來對權限系統進行總結,以便在各種系統中可對照此篇文檔來進行權限系統的實現,考慮到文檔的關注點在復用度,在文檔中不會過多的去描述功能點到模型產生的過程,而是采用直接通過產生的模型來說明基于此模型如何實現功能點的需求。

          二.  功能復用

          功能復用相當于此權限模型適合的上下文場景,此權限模型在功能點方面的考慮主要有以下三個方面:

          n         基于角色的用戶安全管理

          系統權限以角色為基礎,即以角色來進行權限的分配以及授予,角色分配給用戶以使用戶可獲取相應的權限,角色通過授予權限來獲得該角色所對應擁有的權限。

          角色的權限可繼承,即子角色自動繼承父角色的權限。

          權限的包含與排斥,包含舉例來說就是權限A可包含權限B,體現出來即為擁有權限A即自動擁有了權限B,而排斥舉例來說就是角色不可同時擁有權限A和權限B

          n         系統資源(功能模塊)操作的控制

          系統資源操作的控制在系統上主要分為兩個方面:

          l         正常途徑系統資源操作的控制

          體現在實際的需求上通常是菜單、按鈕、鏈接根據用戶所在角色的權限的可見性。

          l         非法途徑系統資源操作的控制

          體現在實際的需求上是防止通過非法的URL或命令等方式對系統受保護的系統資源進行操作。

          n         數據資源操作的控制

          數據資源操作的控制在系統中實際的體現通常是用戶只能訪問相應數據資源操作權限范圍內的數據,如在一個站點中有欄目ABC,用戶M只擁有對A的訪問權限以及對B的管理權限,那么在用戶M訪問系統時站點中應該只列出欄目A和欄目B,同時在欄目B上擁有相應的管理按鈕或鏈接。

          數據資源也需要支持權限繼承的模式,即當數據資源本身構成了需要繼承的父子關系時,子自動擁有父的所有權限,舉例來說就是站點和欄目,欄目自動擁有站點的所有權限。

          數據資源的權限也是需要有包含和排斥的支持。

          數據資源操作權限的授予通常需要的授予給多種對象,如用戶、角色以及組織機構等。

          三.  模型復用

          對于以上的功能點,提出了相應的解決方案構成如下模型:

          n         基于角色的用戶安全管理

          基于RBAC構成實現功能點的模型,如下:

          系統資源權限模型.jpg
          圖表
          1 基于RBAC的系統資源權限模型

                        基于此模型對當前需求的實現方法為:

          l         權限的授予

          在權限授予時需要實現的為維護用戶與角色的關聯模型以及角色與權限的關聯模型。

          同時需要的是資源以及操作的維護,資源上配置的主要為功能模塊的一些相關信息,如名稱、描述等,操作上配置的主要為功能模塊所需要受控的操作,如對功能模塊的訪問、保存動作等,此處的關鍵在于配置操作所對應的命令,在B/S體系中通常是URL,在C/S體系中有可能是Command或其他的入口關鍵字。

          l         角色權限的繼承

          角色權限的繼承通過角色的子關聯來實現,遵循的原則為子角色自動擁有父角色的所有權限,在進行授權動作時所需要做的是維護角色父子關系關聯模型。

          l         權限的包含與排斥

          權限的包含通過權限的子關聯來實現,遵循的原則為父自動擁有子的概念,在進行授權動作時所需做的是維護權限的父子關系關聯模型。

          權限的排斥在此模型中沒有考慮。

          n         系統資源(功能模塊)操作的控制

          系統資源操作的控制基于圖表1的模型而得以實現。

          l         正常途徑系統資源操作的控制

          此時通常的做法是在菜單、按鈕、鏈接這些顯示之前做對應的資源操作權限的判斷。

          判斷的方法為獲取用戶所在的角色,判斷用戶角色是否有進行資源操作的權限(同時需判斷權限的包含的問題),如無則遞規獲取用戶角色的父角色是否有進行資源操作的權限。

          l         非法途徑系統資源操作的控制

          對于非法途徑對系統資源操作的訪問,通常的實現方法為在具體的對象執行前做截斷處理,通常采用ProxyInterceptor模式。

          n         數據資源操作的控制

          數據資源操作的控制則難以基于上面的權限模型進行實現,需要對其進行擴展,產生的實現需求的模型為:

          數據資源權限模型.jpg
          圖表
          2 數據資源權限模型

                        基于此模型對于數據資源操作的控制的實現主要在兩個方面:

          l         數據資源操作權限的授予

          在進行數據資源操作權限的授予時維護權限授予模型,同時需要根據數據資源操作權限的授予同步校驗權限模型(此時需要考慮權限的繼承、包含的問題)

          l         數據資源操作權限的校驗

          校驗時通過校驗權限模型即可完成。

          四.  問題

          在文中提及的權限模型確實可以實現功能需求,但其在開發過程中以及應用過程中通常有這樣的問題:

          n         系統資源操作控制時權限校驗的低效

          通常的解決方案是cache機制。

          n         數據資源操作權限授予的低效

          n         權限系統對于原有系統的侵入性

          通常的解決方案有ProxyInterceptorAOP


          ps: 這篇相對于我之前的漫談權限系統系列的文章來說相當于只是個抽取和歸納,詳細的還是得看那個系列的幾篇文章。

          posted on 2005-11-08 11:49 BlueDavy 閱讀(6905) 評論(8)  編輯  收藏 所屬分類: 系統設計

          評論

          # re: 權限模型 2005-11-08 22:08 jiniboy

          有開源的東東嗎  回復  更多評論   

          # re: 權限模型 2005-11-09 16:10 Programmer's Life

          呵呵,在計劃中.....  回復  更多評論   

          # re: 權限模型 2005-11-11 11:07 我對jiniboy說

          類似的已經早有了,是基于web resource的,我不告訴你  回復  更多評論   

          # re: 權限模型 2005-11-11 16:16 Programmer's Life

          哦?我倒是關心,透露下...

          不會是說acegi吧?  回復  更多評論   

          # re: 權限模型 2006-03-24 20:36 public

          現在大多采用功能權限 和 業務權限 兩級控制
            回復  更多評論   

          # re: 權限模型 2006-11-02 13:16 kf

          有沒有點創意的東西啊,這種東西太沒用了吧。acegi授權那塊做的也不行。  回復  更多評論   

          # re: 權限模型 2006-11-02 16:24 BlueDavy

          @kf
          請自己去確認acegi是否能實現可繼承的數據權限控制.....
          不懂就不要亂說話。  回復  更多評論   

          # re: 權限模型 2008-10-27 17:31 lucker050530

          不般人我不告訴他  回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          統計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汉源县| 铜梁县| 乐业县| 平果县| 桦川县| 甘孜县| 霍城县| 马关县| 浑源县| 额济纳旗| 鄂伦春自治旗| 尉氏县| 霍山县| 虹口区| 呼和浩特市| 金塔县| 上饶市| 莎车县| 桂东县| 屏边| 什邡市| 保德县| 兴仁县| 天等县| 高平市| 内黄县| 巴马| 全椒县| 和政县| 家居| 缙云县| 三穗县| 云阳县| 贵州省| 东兴市| 永顺县| 郸城县| 诏安县| 股票| 榆社县| 天水市|