RBAC模型:基于用戶-角色-權(quán)限控制的一些思考
本文將從什么是RBAC模型、RBAC模型的分類、什么是權(quán)限、用戶組的使用、實(shí)例分析這幾個(gè)方面來整理說明。
目前這份工作做的大部分系統(tǒng)都是ToB性質(zhì),幾乎每個(gè)都涉及到了權(quán)限管理。經(jīng)過多個(gè)系統(tǒng)的設(shè)計(jì),知識(shí)的豐富,慢慢的發(fā)現(xiàn)主流的權(quán)限管理系統(tǒng)都是RBAC模型(Role-Based Access Control 基于角色的訪問控制)的變形和運(yùn)用,只是根據(jù)不同的業(yè)務(wù)和設(shè)計(jì)方案,呈現(xiàn)不同的顯示效果。于是在前人的基礎(chǔ)上,加上自己的理解,認(rèn)真總結(jié)一下RBAC模型的相關(guān)知識(shí)。
在正式討論RBAC模型之前,我們先思考一個(gè)問題,為什么我們要做角色權(quán)限系統(tǒng)?
大家先給自己1分鐘時(shí)間思考(產(chǎn)品經(jīng)理要學(xué)會(huì)隨時(shí)思考哦)。
…思考10s
…思考30s
…思考50s
好的,1分鐘到了,下面揭曉答案:
一個(gè)很明顯的答案就是系統(tǒng)存在不同權(quán)限的用戶,而根據(jù)業(yè)務(wù)要求的不同,每個(gè)用戶能使用的功能、查看的內(nèi)容是不同的。舉個(gè)最簡(jiǎn)單的例子:釘釘后臺(tái),普通員工和行政能看到的菜單、使用的功能是不同的,行政可以查看所有員工的出勤記錄而普通員工則不行。
接下來,本文將從以下幾個(gè)方面進(jìn)行整理說明:什么是RBAC模型、RBAC模型的分類、什么是權(quán)限、用戶組的使用、實(shí)例分析。
一、什么是RBAC模型
RBAC(Role-Based Access Control)即:基于角色的權(quán)限控制。通過角色關(guān)聯(lián)用戶,角色關(guān)聯(lián)權(quán)限的方式間接賦予用戶權(quán)限。
如下圖:
有人會(huì)問為什么不直接給用戶分配權(quán)限,還多此一舉的增加角色這一環(huán)節(jié)呢?
其實(shí)是可以直接給用戶分配權(quán)限,只是直接給用戶分配權(quán)限,少了一層關(guān)系,擴(kuò)展性弱了許多,適合那些用戶數(shù)量、角色類型少的平臺(tái)。
對(duì)于通常的系統(tǒng),比如:存在多個(gè)用戶擁有相同的權(quán)限,在分配的時(shí)候就要分別為這幾個(gè)用戶指定相同的權(quán)限,修改時(shí)也要為這幾個(gè)用戶的權(quán)限進(jìn)行一一修改。有了角色后,我們只需要為該角色制定好權(quán)限后,將相同權(quán)限的用戶都指定為同一個(gè)角色即可,便于權(quán)限管理。
對(duì)于批量的用戶權(quán)限調(diào)整,只需調(diào)整用戶關(guān)聯(lián)的角色權(quán)限,無需對(duì)每一個(gè)用戶都進(jìn)行權(quán)限調(diào)整,既大幅提升權(quán)限調(diào)整的效率,又降低了漏調(diào)權(quán)限的概率。
二、RBAC模型的分類
RBAC模型可以分為:RBAC0、RBAC1、RBAC2、RBAC3 四種。其中RBAC0是基礎(chǔ),也是最簡(jiǎn)單的,相當(dāng)于底層邏輯,RBAC1、RBAC2、RBAC3都是以RBAC0為基礎(chǔ)的升級(jí)。
一般情況下,使用RBAC0模型就可以滿足常規(guī)的權(quán)限管理系統(tǒng)設(shè)計(jì)了。
2.1 RBAC0模型
最簡(jiǎn)單的用戶、角色、權(quán)限模型。這里面又包含了2種:
- 用戶和角色是多對(duì)一關(guān)系,即:一個(gè)用戶只充當(dāng)一種角色,一種角色可以有多個(gè)用戶擔(dān)當(dāng)。
- 用戶和角色是多對(duì)多關(guān)系,即:一個(gè)用戶可同時(shí)充當(dāng)多種角色,一種角色可以有多個(gè)用戶擔(dān)當(dāng)。
那么,什么時(shí)候該使用多對(duì)一的權(quán)限體系,什么時(shí)候又該使用多對(duì)多的權(quán)限體系呢?
如果系統(tǒng)功能比較單一,使用人員較少,崗位權(quán)限相對(duì)清晰且確保不會(huì)出現(xiàn)兼崗的情況,此時(shí)可以考慮用多對(duì)一的權(quán)限體系。其余情況盡量使用多對(duì)多的權(quán)限體系,保證系統(tǒng)的可擴(kuò)展性。如:張三既是行政,也負(fù)責(zé)財(cái)務(wù)工作,那張三就同時(shí)擁有行政和財(cái)務(wù)兩個(gè)角色的權(quán)限。
2.2 RBAC1模型
相對(duì)于RBAC0模型,增加了子角色,引入了繼承概念,即子角色可以繼承父角色的所有權(quán)限。
使用場(chǎng)景:如某個(gè)業(yè)務(wù)部門,有經(jīng)理、主管、專員。主管的權(quán)限不能大于經(jīng)理,專員的權(quán)限不能大于主管,如果采用RBAC0模型做權(quán)限系統(tǒng),極可能出現(xiàn)分配權(quán)限失誤,最終出現(xiàn)主管擁有經(jīng)理都沒有的權(quán)限的情況。
而RBAC1模型就很好解決了這個(gè)問題,創(chuàng)建完經(jīng)理角色并配置好權(quán)限后,主管角色的權(quán)限繼承經(jīng)理角色的權(quán)限,并且支持在經(jīng)理權(quán)限上刪減主管權(quán)限。
2.3 RBAC2模型
基于RBAC0模型,增加了對(duì)角色的一些限制:角色互斥、基數(shù)約束、先決條件角色等。
- 角色互斥:同一用戶不能分配到一組互斥角色集合中的多個(gè)角色,互斥角色是指權(quán)限互相制約的兩個(gè)角色。案例:財(cái)務(wù)系統(tǒng)中一個(gè)用戶不能同時(shí)被指派給會(huì)計(jì)角色和審計(jì)員角色。
- 基數(shù)約束:一個(gè)角色被分配的用戶數(shù)量受限,它指的是有多少用戶能擁有這個(gè)角色。例如:一個(gè)角色專門為公司CEO創(chuàng)建的,那這個(gè)角色的數(shù)量是有限的。
- 先決條件角色:指要想獲得較高的權(quán)限,要首先擁有低一級(jí)的權(quán)限。例如:先有副總經(jīng)理權(quán)限,才能有總經(jīng)理權(quán)限。
- 運(yùn)行時(shí)互斥:例如,允許一個(gè)用戶具有兩個(gè)角色的成員資格,但在運(yùn)行中不可同時(shí)激活這兩個(gè)角色。
2.4 RBAC3模型
稱為統(tǒng)一模型,它包含了RBAC1和RBAC2,利用傳遞性,也把RBAC0包括在內(nèi),綜合了RBAC0、RBAC1和RBAC2的所有特點(diǎn),這里就不在多描述了。
三、什么是權(quán)限
說了這么久用戶-角色-權(quán)限,可能小伙伴們都了解了什么是用戶、什么是角色。但是有的小伙伴會(huì)好奇,那權(quán)限又是個(gè)什么玩意呢?
權(quán)限是資源的集合,這里的資源指的是軟件中所有的內(nèi)容,包括模塊、菜單、頁面、字段、操作功能(增刪改查)等等。具體的權(quán)限配置上,目前形式多種多樣,按照我個(gè)人的理解,可以將權(quán)限分為:頁面權(quán)限、操作權(quán)限和數(shù)據(jù)權(quán)限(這種分類法,主要是結(jié)合自己在工作中的實(shí)際情況理解總結(jié)而來,若有不足之處,也請(qǐng)大家指出)。
頁面權(quán)限:所有系統(tǒng)都是由一個(gè)個(gè)的頁面組成,頁面再組成模塊,用戶是否能看到這個(gè)頁面的菜單、是否能進(jìn)入這個(gè)頁面就稱為頁面權(quán)限。
如下圖:
客戶列表、客戶黑名單、客戶審批頁面組成了客戶管理這個(gè)模塊。對(duì)于普通用戶,不能進(jìn)行審批操作,即無客戶審批頁面權(quán)限,在他的賬號(hào)登錄后側(cè)邊導(dǎo)航欄只顯示客戶列表、客戶黑名單兩個(gè)菜單。
操作權(quán)限:用戶凡是在操作系統(tǒng)中的任何動(dòng)作、交互都是操作權(quán)限,如增刪改查等。
數(shù)據(jù)權(quán)限:一般業(yè)務(wù)管理系統(tǒng),都有數(shù)據(jù)私密性的要求:哪些人可以看到哪些數(shù)據(jù),不可以看到哪些數(shù)據(jù)。
簡(jiǎn)單舉個(gè)例子:某系統(tǒng)中有銷售部門,銷售專員負(fù)責(zé)推銷商品,銷售主管負(fù)責(zé)管理銷售專員日常工作,經(jīng)理負(fù)責(zé)組織管理銷售主管作業(yè)。
如下圖:
按照實(shí)際理解,‘銷售專員張三’登錄時(shí),只能看到自己負(fù)責(zé)的數(shù)據(jù);銷售主管2登錄時(shí),能看到他所領(lǐng)導(dǎo)的所有業(yè)務(wù)員負(fù)責(zé)的數(shù)據(jù),但看不到其他團(tuán)隊(duì)業(yè)務(wù)員負(fù)責(zé)的數(shù)據(jù)。
換另外一句話就是:我的客戶只有我和我的直屬上級(jí)以及直屬上級(jí)的領(lǐng)導(dǎo)能看到,這就是我理解的數(shù)據(jù)權(quán)限。
要實(shí)現(xiàn)數(shù)據(jù)權(quán)限有多種方式:
- 可以利用RBAC1模型,通過角色分級(jí)來實(shí)現(xiàn)。
- 在‘用戶-角色-權(quán)限’的基礎(chǔ)上,增加用戶與組織的關(guān)聯(lián)關(guān)系,用組織決定用戶的數(shù)據(jù)權(quán)限。
具體如何做呢?
①組織層級(jí)劃分:
②數(shù)據(jù)可視權(quán)限規(guī)則制定:上級(jí)組織只能看到下級(jí)組織員工負(fù)責(zé)的數(shù)據(jù),而不能看到其他平級(jí)組織及其下級(jí)組織的員工數(shù)據(jù)等。
通過以上兩點(diǎn),系統(tǒng)就可以在用戶登錄時(shí),自動(dòng)判斷要給用戶展示哪些數(shù)據(jù)了。
四、用戶組的使用
當(dāng)平臺(tái)用戶基數(shù)增大,角色類型增多時(shí),如果直接給用戶配角色,管理員的工作量就會(huì)很大。這時(shí)候我們可以引入一個(gè)概念“用戶組”,就是將相同屬性的用戶歸類到一起。
例如:加入用戶組的概念后,可以將部門看做一個(gè)用戶組,再給這個(gè)部門直接賦予角色(1萬員工部門可能就幾十個(gè)),使部門擁有部門權(quán)限,這樣這個(gè)部門的所有用戶都有了部門權(quán)限,而不需要為每一個(gè)用戶再單獨(dú)指定角色,極大的減少了分配權(quán)限的工作量。
同時(shí),也可以為特定的用戶指定角色,這樣用戶除了擁有所屬用戶組的所有權(quán)限外,還擁有自身特定的權(quán)限。
用戶組的優(yōu)點(diǎn),除了減少工作量,還有更便于理解、增加多級(jí)管理關(guān)系等。如:我們?cè)谶M(jìn)行組織機(jī)構(gòu)配置的時(shí)候,除了加入部門,還可以加入科室、崗位等層級(jí),來為用戶組內(nèi)部成員的權(quán)限進(jìn)行等級(jí)上的區(qū)分。
關(guān)于用戶組的詳細(xì)疑難解答,請(qǐng)查看https://wen.woshipm.com/question/detail/88fues.html。在這里也十分感謝為我解答疑惑的朋友們!
五、實(shí)例分析
5.1 如何設(shè)計(jì)RBAC權(quán)限系統(tǒng)
首先,我們思考一下一個(gè)簡(jiǎn)單的權(quán)限系統(tǒng)應(yīng)該具備哪些內(nèi)容?
答案顯而易見,RBAC模型:用戶-角色-權(quán)限。所以最基本的我們應(yīng)該具備用戶、角色、權(quán)限這三個(gè)內(nèi)容。
接下來,我們思考,究竟如何將三者關(guān)聯(lián)起來?;仡櫱拔模巧鳛闃屑~,關(guān)聯(lián)用戶、權(quán)限。所以在RBAC模型下,我們應(yīng)該:創(chuàng)建一個(gè)角色,并為這個(gè)角色賦予相應(yīng)權(quán)限,最后將角色賦予用戶。
將這個(gè)問題抽象為流程,如下圖:
現(xiàn)在,基本的流程邏輯已經(jīng)抽象出來了,接下來,分析該如何設(shè)計(jì)呢?
- 第一步,需要角色管理列表,在角色管理列表能快速創(chuàng)建一個(gè)角色,且創(chuàng)建角色的同時(shí)能為角色配置權(quán)限,并且支持創(chuàng)建成功的角色列表能隨時(shí)進(jìn)行權(quán)限配置的的修改;
- 第二步,需要用戶管理列表,在用戶管理列表能快速添加一個(gè)用戶,且添加用戶時(shí)有讓用戶關(guān)聯(lián)角色的功能。
簡(jiǎn)單來說權(quán)限系統(tǒng)設(shè)計(jì)就包含以上兩步,接下來為大家進(jìn)行實(shí)例分析。
5.2 實(shí)例分析
①創(chuàng)建角色列表
在角色列表快速創(chuàng)建一個(gè)角色:點(diǎn)擊創(chuàng)建角色,支持創(chuàng)建角色時(shí)配置權(quán)限。
②創(chuàng)建用戶列表
在用戶列表快速創(chuàng)建一個(gè)用戶:支持用戶關(guān)聯(lián)角色的功能。
上述案例是基于最簡(jiǎn)單的RBAC0模型創(chuàng)建,適用于大部分常規(guī)的權(quán)限管理系統(tǒng)。
下面再分析一下RBAC1中角色分級(jí)具體如何設(shè)計(jì)。
- 在RBAC0的基礎(chǔ)上,加上角色等級(jí)這個(gè)字段。
- 權(quán)限分配規(guī)則制定:低等級(jí)角色只能在高等級(jí)角色權(quán)限基礎(chǔ)上進(jìn)行刪減權(quán)限。
具體界面呈現(xiàn)如下圖:
以上就是簡(jiǎn)單的RBAC系統(tǒng)設(shè)計(jì),若需更復(fù)雜的,還請(qǐng)讀者根據(jù)上面的分析自行揣摩思考,盡管樣式不同,但萬變不離其宗,理解清楚RBAC模型后,結(jié)合自己的業(yè)務(wù)就可以設(shè)計(jì)出一套符合自己平臺(tái)需求的角色權(quán)限系統(tǒng),具體的就不再多闡述了。
六、小結(jié)
文章的內(nèi)容主要是自己工作中實(shí)際的使用場(chǎng)景,抱著他山之石可以攻玉的想法,參考了現(xiàn)有的方法論,結(jié)合自己系統(tǒng)的實(shí)際情況,對(duì)RBAC模型做了細(xì)致的總結(jié)理解。若有不足之處,還請(qǐng)大家多多溝通,共同進(jìn)步。
本文由 @?珣玗琪 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
要實(shí)現(xiàn)數(shù)據(jù)權(quán)限有多種方式:
可以利用RBAC1模型,通過角色分級(jí)來實(shí)現(xiàn)。
在‘用戶-角色-權(quán)限’的基礎(chǔ)上,增加用戶與組織的關(guān)聯(lián)關(guān)系,用組織決定用戶的數(shù)據(jù)權(quán)限。
如何抉擇哪一種更適合
你最后那張圖,分配權(quán)限:分為頁面權(quán)限&操作權(quán)限。感覺不是太靈活,比如針對(duì)某一X角色我想分配給他A頁面的查看權(quán)限,B頁面的編輯權(quán)限,這時(shí)你這個(gè)模型就不能滿足,但是如果把2個(gè)細(xì)分拆分去組合形成某一具體權(quán)限(如A頁面編輯權(quán)限),則又感覺會(huì)使產(chǎn)品操作體驗(yàn)下降,所以想交流下,有沒有什么折中或者替代更優(yōu)方案?
可以把頁面權(quán)限和功能權(quán)限放一起,頁面下包含功能。
能不能用這個(gè)頁面,能不能用這個(gè)頁面下的功能
有點(diǎn)疑惑,什么樣的場(chǎng)景需要多大的靈活度呢?比如:針對(duì)某一X角色我想分配給他A頁面的查看權(quán)限,B頁面的編輯權(quán)限,這種情況 我就會(huì)一邊擔(dān)心過度開發(fā),一邊擔(dān)心不夠靈活。
針對(duì)頁面做操作權(quán)限配置,配置起來確實(shí)挺麻煩的?;蛘哒沓鲎罨A(chǔ)的權(quán)限,比如就是查看,角色擁有查看權(quán)限,對(duì)用戶賦予角色后,再給用戶單獨(dú)針對(duì)某個(gè)頁面掛一個(gè)編輯權(quán)限?
實(shí)例里 基于 RBAC1 設(shè)計(jì)的原型邏輯上是不是有漏洞呢?
等級(jí) 2 只允許在等級(jí) 1 的基礎(chǔ)上刪減,但如果存在相同的多個(gè)等級(jí)為 1 的角色,在創(chuàng)建新角色的時(shí)候,選擇等級(jí) 2,那該角色要繼承哪個(gè)等級(jí)為 1 的權(quán)限列表呢?
另外,數(shù)據(jù)權(quán)限的設(shè)計(jì)沒有在實(shí)例里體現(xiàn),所以對(duì)這個(gè)模塊還是有疑問,希望作者有空可以繼續(xù)完善啦~ 辛苦??!
等級(jí)是與角色關(guān)聯(lián)起來的,即一個(gè)角色對(duì)應(yīng)一個(gè)等級(jí)。
在創(chuàng)建新角色時(shí),可以選擇他的上級(jí)角色是哪個(gè)
按照RBAC1 模型的原理,有個(gè)父角色和子角色的話,是不是不需要設(shè)定用戶組也可以完成權(quán)限控制,滿足需求
用戶組不還是要把用戶手動(dòng)分組,一萬個(gè)用戶都要分組,這個(gè)工作量也不小 吧
我的理解是,比如用戶組是部門,那么這一萬人的分組,是在入職時(shí)已經(jīng)分好的。
當(dāng)配置權(quán)限的時(shí)候,不需要再次將一萬人進(jìn)行分組,而且依據(jù)組織結(jié)構(gòu)中的部門,對(duì)部門進(jìn)行權(quán)限配置,部門下的員工就能獲得該部門的權(quán)限,這樣,工作量由一萬減少到幾十個(gè)。
1. 可以利用RBAC1模型,通過角色分級(jí)來實(shí)現(xiàn)。
2. 在‘用戶-角色-權(quán)限’的基礎(chǔ)上,增加用戶與組織的關(guān)聯(lián)關(guān)系,用組織決定用戶的數(shù)據(jù)權(quán)限。
這兩種 選擇上傾向哪種呢?
1、RBAC1是理論的支撐,增加用戶、組織的關(guān)系是結(jié)合了實(shí)際使用場(chǎng)景,便于使用者理解,提高用戶體驗(yàn)的設(shè)計(jì)方式。
2、具體如何選擇,還是需要根據(jù)實(shí)際需求情況考慮,比如:
某組織下,各個(gè)部門權(quán)限不同,對(duì)部門A分配權(quán)限1~5,部門下存在各個(gè)崗位,所有崗位的權(quán)限均來源于部門A擁有的權(quán)限,即1~5,不同崗位又有不同權(quán)限,可能有的崗位有權(quán)限1和3,有的崗位有權(quán)限2、3、4,部門領(lǐng)導(dǎo)可以有1~5全部的權(quán)限
這樣既有角色分級(jí)的理論存在,又結(jié)合了部門-崗位-人員(組織關(guān)系)的實(shí)際組織架構(gòu)設(shè)計(jì)
如果有個(gè)同事身兼數(shù)職、他在運(yùn)營(yíng)部門、兼顧資產(chǎn)工作、他只有運(yùn)營(yíng)部門權(quán)限、那資產(chǎn)權(quán)限怎給他分配呢、創(chuàng)業(yè)小公司很多這種身兼數(shù)職 部門組織架構(gòu)不嚴(yán)謹(jǐn)情況
總結(jié)的很好,以前做的一直是基于URL的權(quán)限控制,這種基于資源的增/刪/改/查操作,如何確定到URL?
url 可以和 資源 手動(dòng)關(guān)聯(lián),以便管理
謝謝作者,我是初級(jí)產(chǎn)品經(jīng)理,真是解決我的燃眉之急。
思考大于行動(dòng)
還需要考慮異常,想請(qǐng)教下如果角色A被刪除,那么關(guān)聯(lián)的用戶怎么處理?
如果要?jiǎng)h除角色,先決條件是要保證旗下用戶為空
一個(gè)部門下,多個(gè)相同等級(jí)的角色,哪個(gè)被繼承?
這個(gè)應(yīng)該后續(xù)還要選擇被繼承的角色吧?不然建立不了關(guān)聯(lián)關(guān)系。
學(xué)習(xí)了,謝謝~
百變不離其中
想加你微信,請(qǐng)教你
可以的,yx634326454
總結(jié)到位厲害,另外問下ROAC3使用場(chǎng)景有哪些呢,想不到啊??
RBAC3是綜合了前面幾種情況,比如:系統(tǒng)中運(yùn)用了RBAC1模型來對(duì)市場(chǎng)部角色的用戶做數(shù)據(jù)權(quán)限區(qū)分,也運(yùn)用了RBAC2來對(duì)某些角色進(jìn)行了基數(shù)設(shè)置。不知道這樣解釋你是否能懂。
ps:是RBAC模型 不是ROAC哈
贊