RBAC目前使用最爲廣泛的權限模型,本文通過平常工作及工作外的積累,整理了幾種比較經典的權限體系,希望對大家有所幫助!
一、什麼是RBAC
RBAC(基於角色的權限控制)模型的核心是在用戶和權限之間引入了角色的概念。取消了用戶和權限的直接關聯,改爲通過用戶關聯角色、角色關聯權限的方法來間接地賦予用戶權限(如下圖),從而達到用戶和權限解耦的目的。
組成部分:用戶,角色,權限,用戶角色關係,角色權限關係
例如: a.功能需求列表
b.權限控制流程
RABC的好處
- 職能劃分更謹慎。對於角色的權限調整不僅僅只影響單個用戶,而是會影響關聯此角色的所有用戶,管理員下發/回收權限會更爲謹慎;
- 便於權限管理。對於批量的用戶權限調整,只需調整用戶關聯的角色權限即可,無需對每一個用戶都進行權限調整,既大幅提升權限調整的效率,又降低漏調權限的概率;
在不斷的發展過程中,RBAC也因不同的需求而演化出了不同的版本,目前主要有以下幾個版本:
- RBAC0,這是RBAC的初始形態,也是最原始、最簡單的RBAC版本;
- RBAC1,基於RBAC0的優化,增加了角色的分層(即:子角色),子角色可以繼承父角色的所有權限;
- RBAC2,基於RBAC0的另一種優化,增加了對角色的一些限制:角色互斥、角色容量等;
- RBAC3,最複雜也是最全面的RBAC模型,它在RBAC0的基礎上,將RBAC1和RBAC2中的優化部分進行了整合;
二、基於RBAC的幾種權限體系設計
1、用戶-角色-權限
這種權限體系其實就是RBAC0的模式了。這裏面又包含了2種:
- 用戶和角色是多對一關係,即:一個用戶只充當一種角色,一種角色可以有多個用戶擔當;
- 用戶和角色是多對多關係,即:一個用戶可同時充當好幾種角色,一種角色可以有多個用戶擔當;
如上圖:對於左邊的用戶-角色對應,每個人只能同時擁有一種角色,但是同一個角色裏邊,可能會含有多個用戶(如:李四和王麻子都是業務員);而右邊的用戶-角色對應,是在左邊的基礎上,增加了一個用戶可擁有多種角色的情況(如:小馬哥既是經理,也要負責財務的工作);
那麼,什麼時候該使用多對一的權限體系,什麼時候又該使用多對多的權限體系呢?
我的建議是:儘量可能地使用多對多的權限體系。如果這個系統的功能比較單一、使用人員較少、崗位權限相對清晰且不會出現兼崗的情況,這種情況也可以考慮用多對一的權限體系。
2、用戶-組織-角色-權限
一般公司的業務管理系統,都有數據私密性的要求:哪些人可以看到哪些數據,哪些人不可以看到哪些數據。這個時候,我們就需要把這些東西也考慮到你的權限體系內了。
假設上圖是一家公司業務部門的組織架構圖,公司要求你基於這個組織架構設計一個業務管理系統,並要求系統需要滿足不同用戶的數據私密性,比如:“張三”登錄時,只能看到“張三”負責的數據;“張三”的領導登錄時,能看到“團隊A”的所有業務員負責的數據,但看不到其他團隊業務員負責的數據等等。
在這種情況下,上一種權限體系就不適用了,但我們可以對其進行一些小改造後,即可達到數據管控的目的,如下圖:
在“用戶-角色-權限”的基礎上,我們增加了用戶與組織的關聯關係,組織決定了用戶的數據可視權限。但要想真正達到這個效果,我們還需要做2件事:
- 組織層級劃分。如下圖,我們需要對組織進行梳理,並劃分層級;
- 數據可視權限規則制定。比如:上級組織職能看到下級組織員工負責的數據,而不能看到其他平級組織及其下級組織的員工數據等。
通過以上兩點,系統就可以在用戶登錄時,自動判斷要給用戶展示哪些數據了!
3、用戶-組織-崗位-角色-權限
第三種權限體系又是在第二種權限體系上進行優化的,增加了用戶與崗位的關聯關係,示意圖如下:
增加崗位有以下幾點好處:
- 識別用戶的主要身份。一個人可能身兼多職(多個角色),但是他的主要職能是固定的,那怎麼告訴系統用戶的主要職能是什麼呢?答案就是:通過崗位!拿上面的小馬哥舉例:小馬哥雖然身兼經理和財務兩種身份,但他的本職工作是“經理”,因此,他的系統崗位應該“經理”。當他登錄時,系統會識別他的身份爲“經理”,只不過這個“經理”剛好兼具了其他崗位的職能而已;
- 通過“組織-崗位”關聯,快速甄別用戶崗位。公司在不斷地發展的過程中,系統的用戶角色也會不斷增加,當角色達到一定數量以後,管理員每新增一個用戶都要花相當的時間去尋找角色。引入崗位後,可將組織和崗位、崗位和角色提前進行關聯,配置賬號時,管理員只要選定組織,系統就給出與該組織關聯的崗位,而這些崗位,又是提前關聯好角色的,選擇起來,既方便又高效!
三、總結
以上是基於RBAC模型的三種權限體系,不難看出,三種權限體系的本質都是用戶和權限進行解耦,以達到權限的靈活運用。