在權(quán)限系統(tǒng)中,只有RBAC模型嗎?
編輯導(dǎo)語:一般市面上的權(quán)限設(shè)計(jì),都會(huì)告訴大家RBAC模型,即把權(quán)限系統(tǒng)抽象出來三個(gè)實(shí)體:用戶、角色、資源,這三個(gè)實(shí)體之間的關(guān)系。那么,只有RBAC 模型夠用嗎?RBAC 模型的使用場(chǎng)景有哪些?一起來看一下吧。
一、什么是 RBAC 模型?
市面上有很多權(quán)限系統(tǒng)的設(shè)計(jì)都會(huì)告訴大家 RBAC 的這個(gè)模型,無非是說把權(quán)限系統(tǒng)抽象出來三個(gè)實(shí)體:用戶、角色、資源(權(quán)限的抽象),三個(gè)實(shí)體的關(guān)系如下圖:
也就是說,角色實(shí)際上是人和資源的一個(gè)中間橋梁,人通過擁有某個(gè)角色而獲得這個(gè)角色下面所有的權(quán)限。如下圖:
1. RBAC 模型的優(yōu)點(diǎn)是什么?
核心優(yōu)點(diǎn)無非是當(dāng)用戶的工作內(nèi)容發(fā)生異動(dòng)時(shí),只需要將用戶所關(guān)聯(lián)的角色解綁就可以,而不用把用戶身上的權(quán)限一個(gè)一個(gè)的刪除掉。
比如當(dāng)上面的財(cái)務(wù)總監(jiān)李總被降職為普通員工時(shí),只需要把他和「財(cái)務(wù)」這個(gè)角色的關(guān)系去掉即可,而不需要去將他原來所有的權(quán)限一個(gè)一個(gè)去掉。
2. 只有 RBAC 夠用嗎?
實(shí)際上,僅僅只有 RBAC 模型,只能夠滿足一些很小型企業(yè)的訴求,大型企業(yè)實(shí)際上僅有 RBAC 是完全不夠用的。
如果僅有 RBAC 模型,在大型企業(yè)的復(fù)雜人員架構(gòu)和職能里,就會(huì)出現(xiàn)「角色」的膨脹,可能會(huì)出現(xiàn)成百上千個(gè)角色,這是非常難以管理的。
那要如何規(guī)范管理權(quán)限呢?
實(shí)際上我們并不是說 RBAC 不行,RBAC 只是一個(gè)基礎(chǔ),在這個(gè)基礎(chǔ)之上,我們還應(yīng)當(dāng)有一些其他能力,幫助 RBAC 去更好地管控權(quán)限。
3. 場(chǎng)景有哪些?
我們?cè)谄髽I(yè)內(nèi)部做授權(quán)時(shí),經(jīng)常發(fā)現(xiàn)很多的授權(quán)都是按照用戶的部門或者崗位來授權(quán)的。特別是崗位,比如財(cái)務(wù)經(jīng)理就有 XXX 權(quán)限,采購經(jīng)理就有 XXX 權(quán)限。于是乎我們很順其自然地就想到是否給崗位做一個(gè)角色呢?
在 RBAC 上再抽象一下,所謂的角色,我們可以理解為它既是用戶的集合,也是權(quán)限的集合。那么如果僅從用戶的集合來看,能否再抽象得通用一些,不如我們就叫他「用戶集合」吧?
那么,用戶的集合,在企業(yè)內(nèi)部通常會(huì)有哪些呢?相信你很快就會(huì)想到「部門」「崗位」「城市」「職級(jí)」等等。詳細(xì)點(diǎn)說:
OK,當(dāng)你抽象為用戶集合的時(shí)候,你會(huì)發(fā)現(xiàn)這種用戶集合比原來的角色更好用。原因是它可以和企業(yè)的 HR 系統(tǒng)聯(lián)動(dòng),當(dāng)一個(gè)用戶被調(diào)整到另一個(gè)部門時(shí),他的用戶集合也會(huì)自動(dòng)被調(diào)整,當(dāng)一個(gè)用戶的崗位被調(diào)整時(shí),他的用戶集合也會(huì)被調(diào)整,從而實(shí)現(xiàn)與 HR 系統(tǒng)的打通,并且可以減少很多權(quán)限的維護(hù)成本。
我們姑且叫這種授權(quán)方式為「用戶集合授權(quán)」吧。
除此之外,在大型企業(yè)里,我們通常還會(huì)有一些比較復(fù)雜的場(chǎng)景。比如我們要求崗位是產(chǎn)品經(jīng)理且職級(jí)是 P8 的人才能夠擁有某些權(quán)限。
這種場(chǎng)景沒有辦法按照上面的方式來做用戶集合,比如你不能說職級(jí) P8 的人都擁有某些權(quán)限,崗位是產(chǎn)品經(jīng)理的人都擁有某些權(quán)限,這兩種「用戶集合授權(quán)」都不能滿足這個(gè)場(chǎng)景。
我們還可以建立一個(gè)動(dòng)態(tài)的、按照規(guī)則的用戶集合,這個(gè)用戶集合的人是要滿足某些規(guī)則才能夠被加進(jìn)來的。
于是乎,我們發(fā)現(xiàn)這個(gè)可以定義規(guī)則的動(dòng)態(tài)的用戶集合,它非常地健壯,當(dāng)某個(gè)人因工作內(nèi)容發(fā)生異動(dòng)時(shí),他馬上會(huì)被調(diào)整出這個(gè)用戶集合。也能夠很好地減少授權(quán)工作,讓授權(quán)跟隨 HR 系統(tǒng)地變更。
我們叫這種授權(quán)方式為「動(dòng)態(tài)用戶集合授權(quán)」吧!
最后的兩種場(chǎng)景通常是用來兜底的。
比如我們經(jīng)常會(huì)有一些系統(tǒng)管理員,這個(gè)系統(tǒng)管理員跟這個(gè)人的屬性沒有關(guān)系,我們不可能有一個(gè)崗位叫做系統(tǒng)管理員,也不會(huì)有一個(gè)部門叫做系統(tǒng)管理員,于是我們這時(shí)候只能老老實(shí)實(shí)去建一個(gè)角色叫做「系統(tǒng)管理員」了。我們就叫這種授權(quán)為「角色授權(quán)」吧。
我們也經(jīng)常會(huì)遇到一些人他需要臨時(shí)開通某些權(quán)限,但這個(gè)權(quán)限在正常的情況下他不應(yīng)該擁有,那么此時(shí)我們可以通過走審批流給這個(gè)人授權(quán),但請(qǐng)記住,審批流一定要和權(quán)限系統(tǒng)打通,確保審批流通過后,自動(dòng)地在權(quán)限系統(tǒng)給這個(gè)人授權(quán)。同時(shí),還要記得這種臨時(shí)授權(quán)一定要有權(quán)限期限,到期自動(dòng)收回!我們就叫這種授權(quán)為「臨時(shí)授權(quán)」吧。
二、總結(jié)
上文雖然比較零散,但實(shí)際上我是按照從通用 -> 特殊的場(chǎng)景順序來介紹的,總共介紹了 4 種場(chǎng)景,下面給你總結(jié)一下這四種情況。
事實(shí)上大家會(huì)看到,上面這些方法都只是為了讓授權(quán)更加簡便而已,本質(zhì)上還是 RBAC 的模型。原因是當(dāng)組織大了以后,授權(quán)這件事是很繁瑣的,如果不把授權(quán)做得更「自動(dòng)化」一些,那么權(quán)限系統(tǒng)的管理員可能會(huì)累死掉。
實(shí)踐中,我們強(qiáng)烈推薦多使用「用戶集合授權(quán)」,甚至要求 HR 部門配合我們都是應(yīng)該的,因?yàn)槲沂冀K認(rèn)為 HR 和 HR 系統(tǒng)都應(yīng)該為業(yè)務(wù)服務(wù)。盡可能少的使用「角色授權(quán)」,除非你真的沒有辦法了。
上面這些方式并不一定適合你的公司,如果你有一些關(guān)于權(quán)限系統(tǒng)好的實(shí)踐方式或者對(duì)我的批評(píng)指導(dǎo),可以在評(píng)論留言,一起討論。
本文由 @產(chǎn)品經(jīng)理日常思考 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于 CC0 協(xié)議
有兩個(gè)問題:1. RBAC如何控制到按鈕展示的粒度?2. 如何控制到表格展示列的粒度?比如某些角色,他可以看到這個(gè)列表,但不能看到其中幾列數(shù)據(jù)
權(quán)限也分兩種,控制到按鈕的叫功能權(quán)限,控制展示數(shù)據(jù)的叫數(shù)據(jù)權(quán)限,一般數(shù)據(jù)權(quán)限與機(jī)構(gòu)部門掛鉤。你說的控制某些列的展示,實(shí)際也是功能權(quán)限。
控制某些列,我理解不止是功能權(quán)限吧,因?yàn)閿?shù)據(jù)也不要給他看
其實(shí)就是功能權(quán)限。功能都看不到了,數(shù)據(jù)自然也就不可能看見了
很符合現(xiàn)實(shí)的
基于動(dòng)態(tài)規(guī)則的技術(shù)側(cè)如何實(shí)現(xiàn),這個(gè)在db中如何表示呢