<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何設(shè)計一個完美的權(quán)限管理模塊

          共 1521字,需瀏覽 4分鐘

           ·

          2019-05-30 01:17

          作者:不哼不哈

          cnblogs.com/myindex/p/9116177.html

          我們比較常見的就是基于角色的訪問控制,用戶通過角色與權(quán)限進行關(guān)聯(lián)。簡單地說,一個用戶擁有多個角色,一個角色擁有多個權(quán)限。這樣,就構(gòu)造成“用戶-角色-權(quán)限”的授權(quán)模型。在這種模型中,用戶與角色之間、角色與權(quán)限之間,通常都是多對多的關(guān)系。如下圖:


          J31.png


          基于這個,得先了解角色到底是什么?我們可以理解它為一定數(shù)量的權(quán)限的集合,是一個權(quán)限的載體。

          例如:一個論壇的“管理員”、“版主”,它們都是角色。但是所能做的事情是不完全一樣的,版主只能管理版內(nèi)的貼子,用戶等,而這些都是屬于權(quán)限,如果想要給某個用戶授予這些權(quán)限,不用直接將權(quán)限授予用戶,只需將“版主”這個角色賦予該用戶即可。

          但是通過上面我們也發(fā)現(xiàn)問題了,如果用戶的數(shù)量非常大的時候,就需要給系統(tǒng)的每一個用戶逐一授權(quán)(分配角色),這是件非常繁瑣的事情,這時就可以增加一個用戶組,每個用戶組內(nèi)有多個用戶,除了給單個用戶授權(quán)外,還可以給用戶組授權(quán),這樣一來,通過一次授權(quán),就可以同時給多個用戶授予相同的權(quán)限,而這時用戶的所有權(quán)限就是用戶個人擁有的權(quán)限與該用戶所在組所擁有的權(quán)限之和。用戶組、用戶與角色三者的關(guān)聯(lián)關(guān)系如下圖:


          J32.png


          通常在應(yīng)用系統(tǒng)里面的權(quán)限我們把它表現(xiàn)為菜單的訪問(頁面級)、功能模塊的操作(功能級)、文件上傳的刪改,甚至頁面上某個按鈕、圖片是否可見等等都屬于權(quán)限的范疇。有些權(quán)限設(shè)計,會把功能操作作為一類,而把文件、菜單、頁面元素等作為另一類,這樣構(gòu)成“用戶-角色-權(quán)限-資源”的授權(quán)模型。而在做數(shù)據(jù)表建模時,可把功能操作和資源統(tǒng)一管理,也就是都直接與權(quán)限表進行關(guān)聯(lián),這樣可能更具便捷性和易擴展性。如下圖:


          J33.jpg


          這里特別需要注意以下權(quán)限表中有一列“PowerType(權(quán)限類型)”,我們根據(jù)它的取值來區(qū)分是哪一類權(quán)限,可以把它理解為一個枚舉,如“MENU”表示菜單的訪問權(quán)限、“OPERATION”表示功能模塊的操作權(quán)限、“FILE”表示文件的修改權(quán)限、“ELEMENT”表示頁面元素的可見性控制等。

          這樣設(shè)計的好處有兩個:

          一、不需要區(qū)分哪些是權(quán)限操作,哪些是資源,(實際上,有時候也不好區(qū)分,如菜單,把它理解為資源呢還是功能模塊權(quán)限呢?);

          二、方便擴展,當(dāng)系統(tǒng)要對新的東西進行權(quán)限控制時,我只需要建立一個新的關(guān)聯(lián)表“權(quán)限XX關(guān)聯(lián)表”,并確定這類權(quán)限的權(quán)限類型字符串即可。

          需要注意的是,權(quán)限表與權(quán)限菜單關(guān)聯(lián)表、權(quán)限菜單關(guān)聯(lián)表與菜單表都是一對一的關(guān)系。(文件、頁面權(quán)限點、功能操作等同理)。也就是每添加一個菜單,就得同時往這三個表中各插入一條記錄。

          這樣,可以不需要權(quán)限菜單關(guān)聯(lián)表,讓權(quán)限表與菜單表直接關(guān)聯(lián),此時,須在權(quán)限表中新增一列用來保存菜單的ID,權(quán)限表通過“權(quán)限類型”和這個ID來區(qū)分是種類型下的哪條記錄。最后擴展出來的模型完整設(shè)計如下圖:


          J34.jpg


          注意上面我額外增加了一個操作日志表;

          隨著系統(tǒng)的日益龐大,為了方便管理,如果有需要可引入角色組對角色進行分類管理,跟用戶組不同,角色組不參與授權(quán)。

          例如:當(dāng)遇到有多個子公司,每個子公司下有多個部門,這是我們就可以把部門理解為角色,子公司理解為角色組,角色組不參于權(quán)限分配。另外,為方便上面各主表自身的管理與查找,可采用樹型結(jié)構(gòu),如菜單樹、功能樹等,當(dāng)然這些可不需要參于權(quán)限分配。

          數(shù)據(jù)字典:

          1.用戶表:


          J35.png


          2.角色表:


          J36.png


          3.用戶與角色關(guān)聯(lián)表


          J37.png


          4.用戶組表


          J38.png


          5.用戶組與用戶信息關(guān)聯(lián)表


          J39.png


          6.用戶組與角色關(guān)聯(lián)表


          J310.png


          7.菜單表


          J311.png


          8.頁面元素表


          J312.png


          9.文件表


          J313.png


          10.權(quán)限表


          J314.png


          11.權(quán)限與菜單關(guān)聯(lián)表


          J315.png


          12.權(quán)限與頁面元素關(guān)聯(lián)表


          J316.png


          13.權(quán)限與文件關(guān)聯(lián)表


          J317.png


          14.功能操作表


          J318.png


          15.權(quán)限與功能操作關(guān)聯(lián)表


          J319.png


          16.角色與權(quán)限關(guān)聯(lián)表


          J320.png


          17.操作日志表






          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产激情无码毛片久久 | 超碰在线99 | 久操新在线 | 丝袜高跟A片一区二区 | 成人污污网站在线观看 |