春風博客

          春天里,百花香...

          導航

          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          統計

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          三種權限設計方案的歸納和比較

          權限設計是很多系統重要的組成部分,主要用于控制功能和流程,本文將幾種常見的權限設計方案(權限系統的名都是自己起的)的基本設計寫出來,其中不恰當處還請大家指出,我們來討論一下.

          1.等級權限系統

              這種權限系統在論壇中很常見,在這種系統中,權限級別如同官階從低到高排列,每個用戶擁有一個權限,其中設定了這個用戶的權限等級,在用戶需要執行操作前先查看其權限等級是否大于執行操作所需要的權限等級,是則進行操作。

          在等級權限系統中領域對象用戶類User的基本屬性如下:
              id       // 用戶ID
              name     // 用戶名

          領域對象權限類Privilege的基本屬性如下:
              id       // 權限ID
              userid   // 持有此權限的用戶id
              level    // 用戶的權限等級

          level的設置示例
          level 對應可執行的功能
          0 訪問
          1 可跟帖
          2 可創建主貼
          3 可刪除主貼
          4 可創建頻道
          5 可刪除頻道
          6 可查看用戶
          7 可分配用戶權限
          8 可修改用戶密碼
          9 可刪除用戶
          ...

          使用中,執行一個操作比如創建主貼時,先從Session中取出用戶,然后按其id查出其對應的權限等級,拿它和執行創建主貼所需要的等級(3)進行比較,高于則可進行創建主貼操作,否則報告權限不夠.

          等級權限系統簡單易用,在如論壇等剛性控制系統中使用很好,但不適用于需要限制權限的范圍的場合。

          2.范圍限制權限系統

              等級權限系統系統的缺點是控制范圍過廣,比如一個論壇中有很多子論壇,一個子論壇的分版主同時也能對另一個同等級分論壇的帖子進行控制,這在一定程度不合理,有越界的嫌疑,更好的做法是將版主權限控制在一版之內,這時我們可以采用范圍限制權限系統. 這種權限系統在項目管理系統中很常見.

          在等級權限系統中領域對象用戶類User的基本屬性如下:
              id       // 用戶ID
              name     // 用戶名

          領域對象項目類Project的基本屬性如下:
              id       // 項目ID
              name     // 項目名

          領域對象權限類Privilege的基本屬性如下:
              id       // 權限ID
              userid   // 持有此權限的用戶id
              projectid // 此權限對應的項目
              level     // 用戶的權限等級

          其中,通過引入了新屬性projectid,我們對權限的范圍進行了有效限制,項目不同則權限等級再高也是無效,這樣就起到了限制權限能力范圍的作用.

          3.范圍限制單項權限系統

          在上面兩個權限系統中,權限高的自然能執行權限要求低的操作,這樣做權力沒有細分,在有些場合并不合理,比如即使是董事長不可直接操作人事部的招聘任務,他只對雇員去留有建議權.對于這樣的場合我們需要使用范圍限制單項權限系統.它的典型應用如工作流和OA系統。

          在范圍限制單項權限系統中領域對象用戶類User的基本屬性如下:
              id        // 用戶ID
              name      // 用戶名

          領域對象項目類Project的基本屬性如下:
              id        // 項目ID
              name      // 項目名

          領域對象權限類Privilege的基本屬性如下:
              id         // 權限ID
              userid     // 持有此權限的用戶id
              projectid  // 此權限對應的項目
              abilityid  // 權限控制能力id

          領域對象權限控制能力類ability的基本屬性如下:
              id         // 控制能力ID
              item       // 控制能力子項

          item的設置示例
          item 對應可執行的功能
          0 讀
          1 寫
          2 查
          3 刪

          ...

          通過對權限能力的細分,用戶權限的控制粒度更細了,對功能和流程就能有更精確的把握,適用于復雜的場合.

          以上三種權限系統沒有優劣之分只有適用場合的區別,前面的粗略但易于操作,后面的精確但失之煩瑣,在現實使用中我們應該根據場合選擇合適的權限系統.

           

          posted on 2008-04-10 10:20 sitinspring 閱讀(17705) 評論(15)  編輯  收藏 所屬分類: Object Orient Programming

          評論

          # re: 三種權限設計方案的歸納和比較 2008-04-10 15:39 Eric.Zhou

          寫的不錯,應該研究一下RBAC  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-11 23:22 aier

          受教了.受教了.如果這篇文章是作者的原創,我只能說你能把權限比較高深的東西用如此通俗易懂的方式表達出來,非人類也。感謝感謝。  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-12 12:39 一農

          建議大家還是深入了解一下Acegi,Acegi設計的思路和樓主有所不同。在Acegi里有用戶,授權,資源,以及在資源被訪問前進行權限的檢查。一個用戶可以有多個授權,一個授權可以對應多種資源,而資源可以多種多樣。在Acegi的默認實現了有url,方法,領域對象。而用戶和授權的關系,并不只是直接把授權交給用戶,還可以把授權分配給角色,給用戶組,給部門等,然后用戶和角色,用戶組,部門關聯起來,幾種分配方式可以配合使用。
          按照這種思路,采用不同的授權方式,應該是可以用一套類似的程序,實現樓主所說的三種方式。  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-12 13:13 如坐春風

          @一農

          你說的用戶組,部門等組權限確實沒有納入考慮范圍內,這方面確實忽略了。  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-13 14:22 一手的小窩窩

          呵呵,我自己實現的話就用到了
          角色列表 N
          角色擁有權限 (這算是 N對M關系)
          權限列表 M ( 這里面指定訪問資源就比較明確)..

          最后用戶 指定其 角色即可..

          我的思路就是這樣..也是這樣做的.  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-13 21:06 beyond

          不錯,公司現在實習的項目就用到了上面講的三種權限.
          經典,收藏.  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-14 13:29 think.gs

          ^_^,角色繼承一下會省去很多的麻煩哦!  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-14 14:59 lizhiyang

          權限控制中最基礎的就是操作,即web應用中的url。
          可以給某個用戶直接賦予一些操作,讓他擁有這些動作的權限。這樣權限的配置會比較麻煩。于是就有了角色,讓不同的角色擁有不同操作,然后再給用戶賦予一個或多個角色,使其能擁有多個操作。這樣簡單的權限設計就出來了。
          如果要讓部門的管理員能修改本部門員工的權限,能在本部門內增加、刪除員工,能在本部門下增加子部門。那就要增加一個域(其實就是范圍的集合)的概念了,將域賦予某個角色。比如:部門A的管理員a屬于角色AA,角色AA有增加、刪除員工的權限。為了讓管理員a不能在部門B下增加、刪除員工。于是就給管理員a所屬的角色AA賦予一個域。讓a只能在部門A下進行操作。
          說的比較粗淺,希望大家指教。“一農”說的還比較好,大家可以借鑒下他的想法。  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-16 11:09 yjx

          用戶表 user
          角色表 role
          權限表 resource
          角色-權限 role_resource  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-04-16 11:12 yjx

          以上沒說完
          在resource 給url 比如:/new/*.do
          通過 過濾器 控制。

          還可以把 角色表做成 2級(3級)表(給父role id)  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2008-09-10 15:45 Fingki.li

          不錯的文章!  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2009-12-29 17:23 天雪

          你的這三個設計手法,真的讓人很無奈,你不會用AOP技術去做嗎?這樣就把底層也封裝好了。  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較 2010-01-14 18:54 自我的閑人

          說的很不錯,但我認為最后第三種權限管理應該稱為:單項限制權限管理系統
          具體的方式為某用戶是否具有某個功能的某種操作權
          應建立empower權限表
          id
          userid
          em1
          em2
          em3
          .......
          以確定該用否是否具有某功能操作權。  回復  更多評論   

          # re: 三種權限設計方案的歸納和比較[未登錄] 2010-06-02 16:34 呵呵

          @自我的閑人
            回復  更多評論   

          # re: 三種權限設計方案的歸納和比較[未登錄] 2010-06-02 16:36 呵呵

          發現了。。大部分人說的都是RBAC原理。。<基于角色的權限控制>  回復  更多評論   

          sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.
          主站蜘蛛池模板: 灵山县| 广饶县| 新丰县| 仁寿县| 时尚| 新闻| 阿克陶县| 定西市| 沈丘县| 台安县| 友谊县| 盐津县| 桐城市| 朝阳市| 沾益县| 昌邑市| 蒲城县| 应城市| 玛多县| 新安县| 彭水| 改则县| 健康| 漯河市| 田东县| 武宁县| 丰顺县| 贵南县| 左贡县| 南皮县| 公主岭市| 曲阜市| 扶沟县| 通江县| 冷水江市| 盐津县| 凤凰县| 东山县| 肥乡县| 香格里拉县| 红河县|