春風(fēng)博客

          春天里,百花香...

          導(dǎo)航

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

          統(tǒng)計(jì)

          公告

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

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個(gè)人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          三種權(quán)限設(shè)計(jì)方案的歸納和比較

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

          1.等級權(quán)限系統(tǒng)

              這種權(quán)限系統(tǒng)在論壇中很常見,在這種系統(tǒng)中,權(quán)限級別如同官階從低到高排列,每個(gè)用戶擁有一個(gè)權(quán)限,其中設(shè)定了這個(gè)用戶的權(quán)限等級,在用戶需要執(zhí)行操作前先查看其權(quán)限等級是否大于執(zhí)行操作所需要的權(quán)限等級,是則進(jìn)行操作。

          在等級權(quán)限系統(tǒng)中領(lǐng)域?qū)ο笥脩纛怳ser的基本屬性如下:
              id       // 用戶ID
              name     // 用戶名

          領(lǐng)域?qū)ο髾?quán)限類Privilege的基本屬性如下:
              id       // 權(quán)限ID
              userid   // 持有此權(quán)限的用戶id
              level    // 用戶的權(quán)限等級

          level的設(shè)置示例
          level 對應(yīng)可執(zhí)行的功能
          0 訪問
          1 可跟帖
          2 可創(chuàng)建主貼
          3 可刪除主貼
          4 可創(chuàng)建頻道
          5 可刪除頻道
          6 可查看用戶
          7 可分配用戶權(quán)限
          8 可修改用戶密碼
          9 可刪除用戶
          ...

          使用中,執(zhí)行一個(gè)操作比如創(chuàng)建主貼時(shí),先從Session中取出用戶,然后按其id查出其對應(yīng)的權(quán)限等級,拿它和執(zhí)行創(chuàng)建主貼所需要的等級(3)進(jìn)行比較,高于則可進(jìn)行創(chuàng)建主貼操作,否則報(bào)告權(quán)限不夠.

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

          2.范圍限制權(quán)限系統(tǒng)

              等級權(quán)限系統(tǒng)系統(tǒng)的缺點(diǎn)是控制范圍過廣,比如一個(gè)論壇中有很多子論壇,一個(gè)子論壇的分版主同時(shí)也能對另一個(gè)同等級分論壇的帖子進(jìn)行控制,這在一定程度不合理,有越界的嫌疑,更好的做法是將版主權(quán)限控制在一版之內(nèi),這時(shí)我們可以采用范圍限制權(quán)限系統(tǒng). 這種權(quán)限系統(tǒng)在項(xiàng)目管理系統(tǒng)中很常見.

          在等級權(quán)限系統(tǒng)中領(lǐng)域?qū)ο笥脩纛怳ser的基本屬性如下:
              id       // 用戶ID
              name     // 用戶名

          領(lǐng)域?qū)ο箜?xiàng)目類Project的基本屬性如下:
              id       // 項(xiàng)目ID
              name     // 項(xiàng)目名

          領(lǐng)域?qū)ο髾?quán)限類Privilege的基本屬性如下:
              id       // 權(quán)限ID
              userid   // 持有此權(quán)限的用戶id
              projectid // 此權(quán)限對應(yīng)的項(xiàng)目
              level     // 用戶的權(quán)限等級

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

          3.范圍限制單項(xiàng)權(quán)限系統(tǒng)

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

          在范圍限制單項(xiàng)權(quán)限系統(tǒng)中領(lǐng)域?qū)ο笥脩纛怳ser的基本屬性如下:
              id        // 用戶ID
              name      // 用戶名

          領(lǐng)域?qū)ο箜?xiàng)目類Project的基本屬性如下:
              id        // 項(xiàng)目ID
              name      // 項(xiàng)目名

          領(lǐng)域?qū)ο髾?quán)限類Privilege的基本屬性如下:
              id         // 權(quán)限ID
              userid     // 持有此權(quán)限的用戶id
              projectid  // 此權(quán)限對應(yīng)的項(xiàng)目
              abilityid  // 權(quán)限控制能力id

          領(lǐng)域?qū)ο髾?quán)限控制能力類ability的基本屬性如下:
              id         // 控制能力ID
              item       // 控制能力子項(xiàng)

          item的設(shè)置示例
          item 對應(yīng)可執(zhí)行的功能
          0 讀
          1 寫
          2 查
          3 刪

          ...

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

          以上三種權(quán)限系統(tǒng)沒有優(yōu)劣之分只有適用場合的區(qū)別,前面的粗略但易于操作,后面的精確但失之煩瑣,在現(xiàn)實(shí)使用中我們應(yīng)該根據(jù)場合選擇合適的權(quán)限系統(tǒng).

           

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

          評論

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-10 15:39 Eric.Zhou

          寫的不錯(cuò),應(yīng)該研究一下RBAC  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-11 23:22 aier

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

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-12 12:39 一農(nóng)

          建議大家還是深入了解一下Acegi,Acegi設(shè)計(jì)的思路和樓主有所不同。在Acegi里有用戶,授權(quán),資源,以及在資源被訪問前進(jìn)行權(quán)限的檢查。一個(gè)用戶可以有多個(gè)授權(quán),一個(gè)授權(quán)可以對應(yīng)多種資源,而資源可以多種多樣。在Acegi的默認(rèn)實(shí)現(xiàn)了有url,方法,領(lǐng)域?qū)ο蟆6脩艉褪跈?quán)的關(guān)系,并不只是直接把授權(quán)交給用戶,還可以把授權(quán)分配給角色,給用戶組,給部門等,然后用戶和角色,用戶組,部門關(guān)聯(lián)起來,幾種分配方式可以配合使用。
          按照這種思路,采用不同的授權(quán)方式,應(yīng)該是可以用一套類似的程序,實(shí)現(xiàn)樓主所說的三種方式。  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-12 13:13 如坐春風(fēng)

          @一農(nóng)

          你說的用戶組,部門等組權(quán)限確實(shí)沒有納入考慮范圍內(nèi),這方面確實(shí)忽略了。  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-13 14:22 一手的小窩窩

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

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

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

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-13 21:06 beyond

          不錯(cuò),公司現(xiàn)在實(shí)習(xí)的項(xiàng)目就用到了上面講的三種權(quán)限.
          經(jīng)典,收藏.  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-14 13:29 think.gs

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

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-14 14:59 lizhiyang

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

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-16 11:09 yjx

          用戶表 user
          角色表 role
          權(quán)限表 resource
          角色-權(quán)限 role_resource  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-04-16 11:12 yjx

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

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

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2008-09-10 15:45 Fingki.li

          不錯(cuò)的文章!  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2009-12-29 17:23 天雪

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

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較 2010-01-14 18:54 自我的閑人

          說的很不錯(cuò),但我認(rèn)為最后第三種權(quán)限管理應(yīng)該稱為:單項(xiàng)限制權(quán)限管理系統(tǒng)
          具體的方式為某用戶是否具有某個(gè)功能的某種操作權(quán)
          應(yīng)建立empower權(quán)限表
          id
          userid
          em1
          em2
          em3
          .......
          以確定該用否是否具有某功能操作權(quán)。  回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較[未登錄] 2010-06-02 16:34 呵呵

          @自我的閑人
            回復(fù)  更多評論   

          # re: 三種權(quán)限設(shè)計(jì)方案的歸納和比較[未登錄] 2010-06-02 16:36 呵呵

          發(fā)現(xiàn)了。。大部分人說的都是RBAC原理。。<基于角色的權(quán)限控制>  回復(fù)  更多評論   

          sitinspring(http://www.aygfsteel.com)原創(chuàng),轉(zhuǎn)載請注明出處.
          主站蜘蛛池模板: 香河县| 涿州市| 新乡县| 华宁县| 彰武县| 荔波县| 山西省| 共和县| 辽阳县| 灵石县| 通州市| 分宜县| 云南省| 威海市| 永修县| 稻城县| 天峨县| 新化县| 句容市| 沧源| 江门市| 桦甸市| 双牌县| 绥棱县| 吉隆县| 连江县| 靖西县| 岐山县| 芷江| 连城县| 隆昌县| 吐鲁番市| 柳河县| 青阳县| 资溪县| 浦北县| 钟山县| 武义县| 东港市| 桓仁| 商洛市|