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

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

image

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

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

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

image

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

image

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

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

一鲤屡、不需要區(qū)分哪些是權(quán)限操作损痰,哪些是資源,(實(shí)際上酒来,有時(shí)候也不好區(qū)分卢未,如菜單,把它理解為資源呢還是功能模塊權(quán)限呢役首?)尝丐;

二显拜、方便擴(kuò)展衡奥,當(dāng)系統(tǒng)要對(duì)新的東西進(jìn)行權(quán)限控制時(shí),我只需要建立一個(gè)新的關(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)表與菜單表都是一對(duì)一的關(guān)系档址。(文件、頁面權(quán)限點(diǎn)邻梆、功能操作等同理)守伸。也就是每添加一個(gè)菜單,就得同時(shí)往這三個(gè)表中各插入一條記錄浦妄。

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

image

注意上面我額外增加了一個(gè)操作日志表和二;

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

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

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

1.用戶表:

image

2.角色表:

image

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

image

4.用戶組表

image

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

image

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

image

7.菜單表

image

8.頁面元素表

image

9.文件表

image

10.權(quán)限表

image

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

image

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

image

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

image

14.功能操作表

image

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

image

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

image

17.操作日志表

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缩多,隨后出現(xiàn)的幾起案子呆奕,更是在濱河造成了極大的恐慌,老刑警劉巖衬吆,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梁钾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逊抡,警方通過查閱死者的電腦和手機(jī)姆泻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冒嫡,“玉大人拇勃,你說我怎么就攤上這事⌒⒘瑁” “怎么了方咆?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蟀架。 經(jīng)常有香客問我瓣赂,道長,這世上最難降的妖魔是什么辜窑? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任钩述,我火速辦了婚禮,結(jié)果婚禮上穆碎,老公的妹妹穿的比我還像新娘牙勘。我一直安慰自己,他們只是感情好所禀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布方面。 她就那樣靜靜地躺著,像睡著了一般色徘。 火紅的嫁衣襯著肌膚如雪恭金。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天褂策,我揣著相機(jī)與錄音横腿,去河邊找鬼颓屑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耿焊,可吹牛的內(nèi)容都是我干的揪惦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罗侯,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼器腋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钩杰,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤纫塌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后讲弄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體措左,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年垂睬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了媳荒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抗悍。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驹饺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缴渊,到底是詐尸還是另有隱情赏壹,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布衔沼,位于F島的核電站蝌借,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏指蚁。R本人自食惡果不足惜菩佑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凝化。 院中可真熱鬧稍坯,春花似錦、人聲如沸搓劫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枪向。三九已至勤揩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秘蛔,已是汗流浹背陨亡。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工傍衡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人负蠕。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓聪舒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虐急。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箱残,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常止吁。 O...
    我想起個(gè)好名字閱讀 5,320評(píng)論 0 9
  • 在20世紀(jì)90年代期間被辑,大量專家學(xué)者和研究單位對(duì)RBAC(Role-Based Access Control)的概...
    JunChow520閱讀 9,057評(píng)論 3 149
  • 我們比較常見的就是基于角色的訪問控制,用戶通過角色與權(quán)限進(jìn)行關(guān)聯(lián)敬惦。簡單地說盼理,一個(gè)用戶擁有多個(gè)角色,一個(gè)角色擁有多個(gè)...
    志_933e閱讀 23,034評(píng)論 8 20
  • 今天有開心的俄删,也有不開心的宏怔,先講開心的 我們班有一女生,小珊畴椰,她今天看起來可精神了臊诊!明顯比以前開心多了。她以前總是...
    照進(jìn)你心里的小太陽閱讀 98評(píng)論 0 0
  • 今天這一天其實(shí)過的并不是太愉快,因?yàn)楣ぷ鞫嘀愦粒驗(yàn)樾那椴缓苗杌颍驗(yàn)樾那椴缓眠€得做一堆事,真的很累人片任。但是我覺得今天的自...
    晨寶要瘦瘦瘦閱讀 132評(píng)論 0 0