一允瞧、什么是RBAC
權(quán)限系統(tǒng)提的最多的就是RBAC(Role-Base Access Control基于角色的訪問控制)。所謂角色泌绣,其實(shí)就是權(quán)限的集合诀紊,某個(gè)角色就是某幾個(gè)權(quán)限的結(jié)合怒炸。其目的是為了簡化授權(quán)和鑒權(quán)的過程。
RBAC模型的核心是在用戶和權(quán)限之間引入了角色的概念牙瓢。取消了用戶和權(quán)限的直接關(guān)聯(lián)劫拗,改為通過用戶關(guān)聯(lián)角色、角色關(guān)聯(lián)權(quán)限的方法來間接地賦予用戶權(quán)限(如下圖)矾克,從而達(dá)到用戶和權(quán)限解耦的目的页慷。
二、傳統(tǒng)方式權(quán)限設(shè)置
將用戶直接綁定到權(quán)限上去胁附,如下圖:
- 每次去新增用戶的時(shí)候都需要去挨個(gè)點(diǎn)一遍酒繁,工作效率不高;
- 沒有一個(gè)參考的權(quán)限標(biāo)準(zhǔn)控妻;
- 在大型項(xiàng)目中一般不會去使用這樣的權(quán)限管理方式
三州袒、基于RBAC的幾種權(quán)限體系設(shè)計(jì)
3.1、用戶-角色-權(quán)限
3.1.1弓候、用戶和角色是多對一關(guān)系
一個(gè)用戶只充當(dāng)一種角色郎哭,一種角色可以有多個(gè)用戶擔(dān)當(dāng)。
3.1.2菇存、用戶和角色是多對多關(guān)系
一個(gè)用戶可同時(shí)充當(dāng)好幾種角色夸研,一種角色可以有多個(gè)用戶擔(dān)當(dāng)。
如上圖:對于左邊的用戶-角色對應(yīng)依鸥,每個(gè)人只能同時(shí)擁有一種角色亥至,但是同一個(gè)角色里邊,可能會含有多個(gè)用戶(如:李四和王麻子都是業(yè)務(wù)員)毕籽;而右邊的用戶-角色對應(yīng)抬闯,是在左邊的基礎(chǔ)上,增加了一個(gè)用戶可擁有多種角色的情況(如:小馬哥既是經(jīng)理关筒,也要負(fù)責(zé)財(cái)務(wù)的工作)溶握。
3.2、用戶-組織-角色-權(quán)限
一般公司的業(yè)務(wù)管理系統(tǒng)蒸播,都有數(shù)據(jù)私密性的要求:哪些人可以看到哪些數(shù)據(jù)睡榆,哪些人不可以看到哪些數(shù)據(jù)萍肆。這個(gè)時(shí)候,我們就需要把這些東西也考慮到你的權(quán)限體系內(nèi)了胀屿。
假設(shè)上圖是一家公司業(yè)務(wù)部門的組織架構(gòu)圖塘揣,公司要求你基于這個(gè)組織架構(gòu)設(shè)計(jì)一個(gè)業(yè)務(wù)管理系統(tǒng),并要求系統(tǒng)需要滿足不同用戶的數(shù)據(jù)私密性宿崭,比如:“張三”登錄時(shí)亲铡,只能看到“張三”負(fù)責(zé)的數(shù)據(jù);“張三”的領(lǐng)導(dǎo)登錄時(shí)葡兑,能看到“團(tuán)隊(duì)A”的所有業(yè)務(wù)員負(fù)責(zé)的數(shù)據(jù)奖蔓,但看不到其他團(tuán)隊(duì)業(yè)務(wù)員負(fù)責(zé)的數(shù)據(jù)等等。
在這種情況下讹堤,上一種權(quán)限體系就不適用了吆鹤,但我們可以對其進(jìn)行一些小改造后,即可達(dá)到數(shù)據(jù)管控的目的洲守,如下圖:
在“用戶-角色-權(quán)限”的基礎(chǔ)上疑务,我們增加了用戶與組織的關(guān)聯(lián)關(guān)系,組織決定了用戶的數(shù)據(jù)可視權(quán)限梗醇。但要想真正達(dá)到這個(gè)效果知允,我們還需要做2件事:
1、組織層級劃分婴削。如下圖廊镜,我們需要對組織進(jìn)行梳理,并劃分層級唉俗。
2嗤朴、數(shù)據(jù)可視權(quán)限規(guī)則制定。比如:上級組織職能看到下級組織員工負(fù)責(zé)的數(shù)據(jù)虫溜,而不能看到其他平級組織及其下級組織的員工數(shù)據(jù)等雹姊。
通過以上兩點(diǎn),系統(tǒng)就可以在用戶登錄時(shí)衡楞,自動判斷要給用戶展示哪些數(shù)據(jù)了吱雏!
3.3、用戶-組織-崗位-角色-權(quán)限
第三種權(quán)限體系又是在第二種權(quán)限體系上進(jìn)行優(yōu)化的瘾境,增加了用戶與崗位的關(guān)聯(lián)關(guān)系歧杏,示意圖如下:
增加崗位有以下幾點(diǎn)好處:
1、識別用戶的主要身份迷守。一個(gè)人可能身兼多職(多個(gè)角色)犬绒,但是他的主要職能是固定的,那怎么告訴系統(tǒng)用戶的主要職能是什么呢兑凿?答案就是:通過崗位凯力!拿上面的小馬哥舉例:小馬哥雖然身兼經(jīng)理和財(cái)務(wù)兩種身份茵瘾,但他的本職工作是“經(jīng)理”,因此咐鹤,他的系統(tǒng)崗位應(yīng)該“經(jīng)理”拗秘。當(dāng)他登錄時(shí),系統(tǒng)會識別他的身份為“經(jīng)理”祈惶,只不過這個(gè)“經(jīng)理”剛好兼具了其他崗位的職能而已雕旨;
2、通過“組織-崗位”關(guān)聯(lián)捧请,快速甄別用戶崗位奸腺。公司在不斷地發(fā)展的過程中,系統(tǒng)的用戶角色也會不斷增加血久,當(dāng)角色達(dá)到一定數(shù)量以后,管理員每新增一個(gè)用戶都要花相當(dāng)?shù)臅r(shí)間去尋找角色帮非。引入崗位后氧吐,可將組織和崗位、崗位和角色提前進(jìn)行關(guān)聯(lián)末盔,配置賬號時(shí)筑舅,管理員只要選定組織,系統(tǒng)就給出與該組織關(guān)聯(lián)的崗位陨舱,而這些崗位翠拣,又是提前關(guān)聯(lián)好角色的,選擇起來游盲,既方便又高效误墓!