RBAC權限管理模型:基本模型及角色模型解析及舉例
站在巨人的肩膀上我們可以看得更遠,而不是再造一個輪子。
我們在做任何一款產品的時候,或多或少都會涉及到用戶和權限的問題。譬如,做企業類軟件,不同部門、不同職位的人的權限是不同的;做論壇類產品的時候,版主和訪客權限也是不一樣的;再例如一款產品的收費用戶和免費用戶權限也是迥然不同的。
但在設計產品的用戶和權限的關系的時候,很多產品經理可能按照感覺來,在并不清楚用戶和權限是否存在優秀的理論模型的時候,就按照自我推理搭建了產品的用戶和權限模型。而這種基于感覺和推理的模型肯定是有諸多問題的,譬如寫死了關系導致權限不夠靈活、考慮不周導致權限覆蓋能力弱等等。
正如牛頓所言,站在巨人的肩膀上才能看的更遠。我們不妨去參照已有的比較成熟的權限模型,如:RBAC(Role-Based Access Control)——基于角色的訪問控制。我搜集了網上很多關于RBAC的資料,大多與如何用數據表實現RBCA相關,并不容易理解。所以,我會以產品經理的角度去解析RBAC模型,并分別舉例如何運用這套已得到驗證的成熟模型。
一、RBAC模型是什么?
RBAC是一套成熟的權限模型。在傳統權限模型中,我們直接把權限賦予用戶。而在RBAC中,增加了“角色”的概念,我們首先把權限賦予角色,再把角色賦予用戶。這樣,由于增加了角色,授權會更加靈活方便。在RBAC中,根據權限的復雜程度,又可分為RBAC0、RBAC1、RBAC2、RBAC3。其中,RBAC0是基礎,RBAC1、RBAC2、RBAC3都是以RBAC0為基礎的升級。我們可以根據自家產品權限的復雜程度,選取適合的權限模型。
二、基本模型RBAC0
解析:
RBAC0是基礎,很多產品只需基于RBAC0就可以搭建權限模型了。在這個模型中,我們把權限賦予角色,再把角色賦予用戶。用戶和角色,角色和權限都是多對多的關系。用戶擁有的權限等于他所有的角色持有權限之和。
舉例:
譬如我們做一款企業管理產品,如果按傳統權限模型,給每一個用戶賦予權限則會非常麻煩,并且做不到批量修改用戶權限。這時候,可以抽象出幾個角色,譬如銷售經理、財務經理、市場經理等,然后把權限分配給這些角色,再把角色賦予用戶。這樣無論是分配權限還是以后的修改權限,只需要修改用戶和角色的關系,或角色和權限的關系即可,更加靈活方便。此外,如果一個用戶有多個角色,譬如王先生既負責銷售部也負責市場部,那么可以給王先生賦予兩個角色,即銷售經理+市場經理,這樣他就擁有這兩個角色的所有權限。
三、角色分層模型RBAC1
解析:
RBAC1建立在RBAC0基礎之上,在角色中引入了繼承的概念。簡單理解就是,給角色可以分成幾個等級,每個等級權限不同,從而實現更細粒度的權限管理。
舉例:
基于之前RBAC0的例子,我們又發現一個公司的銷售經理可能是分幾個等級的,譬如除了銷售經理,還有銷售副經理,而銷售副經理只有銷售經理的部分權限。這時候,我們就可以采用RBAC1的分級模型,把銷售經理這個角色分成多個等級,給銷售副經理賦予較低的等級即可。
四、角色限制模型RBAC2
解析:
RBAC2同樣建立在RBAC0基礎之上,僅是對用戶、角色和權限三者之間增加了一些限制。這些限制可以分成兩類,即靜態職責分離SSD(Static Separation of Duty)和動態職責分離DSD(Dynamic Separation of Duty)。具體限制如下圖:
舉例:
還是基于之前RBAC0的例子,我們又發現有些角色之間是需要互斥的,譬如給一個用戶分配了銷售經理的角色,就不能給他再賦予財務經理的角色了,否則他即可以錄入合同又能自己審核合同;再譬如,有些公司對角色的升級十分看重,一個銷售員要想升級到銷售經理,必須先升級到銷售主管,這時候就要采用先決條件限制了。
五、統一模型RBAC3
解析:
RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分層,也包括可以增加各種限制。
舉例:
這個就不舉例了,統一模型RBAC3可以解決上面三個例子的所有問題。當然,只有在系統對權限要求非常復雜時,才考慮使用此權限模型。
六、基于RBAC的延展——用戶組
解析:
基于RBAC模型,還可以適當延展,使其更適合我們的產品。譬如增加用戶組概念,直接給用戶組分配角色,再把用戶加入用戶組。這樣用戶除了擁有自身的權限外,還擁有了所屬用戶組的所有權限。
舉例:
譬如,我們可以把一個部門看成一個用戶組,如銷售部,財務部,再給這個部門直接賦予角色,使部門擁有部門權限,這樣這個部門的所有用戶都有了部門權限。用戶組概念可以更方便的給群體用戶授權,且不影響用戶本來就擁有的角色權限。
七、最后的話
無論是本次的權限模型,還是其他產品相關實現方案,很多都已經被前人所總結提煉,我們應深度掌握這些成熟的知識和經驗,而不是絞盡腦汁自我推理。還是文章開頭那句話,站在巨人的肩膀上我們可以看得更遠,而不是再造一個輪子。
作者:Monster,小滿科技產品經理,公眾號:PM怪物Monster
本文由 @Monster 原創發布于人人都是產品經理。未經許可,禁止轉載。
公眾號搜不到了
看過好幾個RBAC模型,這個講的最好,沒有之一