我們在做任何一款產(chǎn)品的時候,或多或少都會涉及到用戶和權(quán)限的問題畏陕。譬如配乓,做企業(yè)類軟件,不同部門、不同職位的人的權(quán)限是不同的犹芹;做論壇類產(chǎn)品的時候崎页,版主和訪客權(quán)限也是不一樣的;再例如一款產(chǎn)品的收費用戶和免費用戶權(quán)限也是迥然不同的腰埂。
但在設(shè)計產(chǎn)品的用戶和權(quán)限的關(guān)系的時候飒焦,很多產(chǎn)品經(jīng)理可能按照感覺來,在并不清楚用戶和權(quán)限是否存在優(yōu)秀的理論模型的時候屿笼,就按照自我推理搭建了產(chǎn)品的用戶和權(quán)限模型牺荠。而這種基于感覺和推理的模型肯定是有諸多問題的,譬如寫死了關(guān)系導(dǎo)致權(quán)限不夠靈活驴一、考慮不周導(dǎo)致權(quán)限覆蓋能力弱等等休雌。
正如牛頓所言,站在巨人的肩膀上才能看的更遠肝断。我們不妨去參照已有的比較成熟的權(quán)限模型杈曲,如:RBAC(Role-Based Access Control)——基于角色的訪問控制。我搜集了網(wǎng)上很多關(guān)于RBAC的資料胸懈,大多與如何用數(shù)據(jù)表實現(xiàn)RBCA相關(guān)担扑,并不容易理解。所以趣钱,我會以產(chǎn)品經(jīng)理的角度去解析RBAC模型涌献,并分別舉例如何運用這套已得到驗證的成熟模型。
一首有、RBAC模型是什么?
RBAC是一套成熟的權(quán)限模型燕垃。在傳統(tǒng)權(quán)限模型中,我們直接把權(quán)限賦予用戶绞灼。而在RBAC中利术,增加了“角色”的概念呈野,我們首先把權(quán)限賦予角色低矮,再把角色賦予用戶。這樣被冒,由于增加了角色军掂,授權(quán)會更加靈活方便。在RBAC中昨悼,根據(jù)權(quán)限的復(fù)雜程度蝗锥,又可分為RBAC0、RBAC1率触、RBAC2终议、RBAC3。其中,RBAC0是基礎(chǔ)穴张,RBAC1细燎、RBAC2、RBAC3都是以RBAC0為基礎(chǔ)的升級皂甘。我們可以根據(jù)自家產(chǎn)品權(quán)限的復(fù)雜程度玻驻,選取適合的權(quán)限模型。
二偿枕、基本模型RBAC0
解析:
RBAC0是基礎(chǔ)璧瞬,很多產(chǎn)品只需基于RBAC0就可以搭建權(quán)限模型了。在這個模型中渐夸,我們把權(quán)限賦予角色嗤锉,再把角色賦予用戶。用戶和角色墓塌,角色和權(quán)限都是多對多的關(guān)系档冬。用戶擁有的權(quán)限等于他所有的角色持有權(quán)限之和。
舉例:
譬如我們做一款企業(yè)管理產(chǎn)品桃纯,如果按傳統(tǒng)權(quán)限模型酷誓,給每一個用戶賦予權(quán)限則會非常麻煩,并且做不到批量修改用戶權(quán)限态坦。這時候盐数,可以抽象出幾個角色起趾,譬如銷售經(jīng)理嚷量、財務(wù)經(jīng)理汗菜、市場經(jīng)理等贮泞,然后把權(quán)限分配給這些角色笆豁,再把角色賦予用戶锌订。這樣無論是分配權(quán)限還是以后的修改權(quán)限深夯,只需要修改用戶和角色的關(guān)系鄙陡,或角色和權(quán)限的關(guān)系即可喻旷,更加靈活方便生逸。此外,如果一個用戶有多個角色且预,譬如王先生既負責銷售部也負責市場部槽袄,那么可以給王先生賦予兩個角色,即銷售經(jīng)理 市場經(jīng)理锋谐,這樣他就擁有這兩個角色的所有權(quán)限遍尺。
三、角色分層模型RBAC1
解析:
RBAC1建立在RBAC0基礎(chǔ)之上涮拗,在角色中引入了繼承的概念乾戏。簡單理解就是迂苛,給角色可以分成幾個等級,每個等級權(quán)限不同鼓择,從而實現(xiàn)更細粒度的權(quán)限管理灾部。
舉例:
基于之前RBAC0的例子,我們又發(fā)現(xiàn)一個公司的銷售經(jīng)理可能是分幾個等級的惯退,譬如除了銷售經(jīng)理赌髓,還有銷售副經(jīng)理,而銷售副經(jīng)理只有銷售經(jīng)理的部分權(quán)限催跪。這時候锁蠕,我們就可以采用RBAC1的分級模型,把銷售經(jīng)理這個角色分成多個等級懊蒸,給銷售副經(jīng)理賦予較低的等級即可荣倾。
四、角色限制模型RBAC2
解析:
RBAC2同樣建立在RBAC0基礎(chǔ)之上骑丸,僅是對用戶舌仍、角色和權(quán)限三者之間增加了一些限制。這些限制可以分成兩類通危,即靜態(tài)職責分離SSD(Static Separation of Duty)和動態(tài)職責分離DSD(Dynamic Separation of Duty)铸豁。具體限制如下圖:
舉例:
還是基于之前RBAC0的例子,我們又發(fā)現(xiàn)有些角色之間是需要互斥的菊碟,譬如給一個用戶分配了銷售經(jīng)理的角色节芥,就不能給他再賦予財務(wù)經(jīng)理的角色了,否則他即可以錄入合同又能自己審核合同逆害;再譬如头镊,有些公司對角色的升級十分看重,一個銷售員要想升級到銷售經(jīng)理魄幕,必須先升級到銷售主管相艇,這時候就要采用先決條件限制了。
五纯陨、統(tǒng)一模型RBAC3
解析:
RBAC3是RBAC1和RBAC2的合集坛芽,所以RBAC3既有角色分層,也包括可以增加各種限制队丝。
舉例:
這個就不舉例了靡馁,統(tǒng)一模型RBAC3可以解決上面三個例子的所有問題欲鹏。當然机久,只有在系統(tǒng)對權(quán)限要求非常復(fù)雜時,才考慮使用此權(quán)限模型赔嚎。
六膘盖、基于RBAC的延展——用戶組
解析:
基于RBAC模型胧弛,還可以適當延展,使其更適合我們的產(chǎn)品侠畔。譬如增加用戶組概念结缚,直接給用戶組分配角色,再把用戶加入用戶組软棺。這樣用戶除了擁有自身的權(quán)限外红竭,還擁有了所屬用戶組的所有權(quán)限。
舉例:
譬如喘落,我們可以把一個部門看成一個用戶組茵宪,如銷售部,財務(wù)部瘦棋,再給這個部門直接賦予角色稀火,使部門擁有部門權(quán)限,這樣這個部門的所有用戶都有了部門權(quán)限赌朋。用戶組概念可以更方便的給群體用戶授權(quán)凰狞,且不影響用戶本來就擁有的角色權(quán)限。
七沛慢、最后的話
無論是本次的權(quán)限模型赡若,還是其他產(chǎn)品相關(guān)實現(xiàn)方案,很多都已經(jīng)被前人所總結(jié)提煉团甲,我們應(yīng)深度掌握這些成熟的知識和經(jīng)驗斩熊,而不是絞盡腦汁自我推理。還是文章開頭那句話伐庭,站在巨人的肩膀上我們可以看得更遠粉渠,而不是再造一個輪子。