一、基於RBAC的概念介紹
1、RBAC(Role-Based Access Control )基於角色的訪問控制。
2、RBAC認為權限的過程可以抽象概括為:判斷【Who是否可以對What進行How的訪問操作(Operator)】這個邏輯表達式的值是否為True的求解過程。即將權限問題轉換為Who、What、How的問題。who、what、how構成了訪問權限三元組。
3、RBAC96是一個模型族,其中包括RBAC0~RBAC3四個概念性模型。
1、)基本模型RBAC0定義了完全支持RBAC概念的任何系統的最低需求。
2、)RBAC1和RBAC2兩者都包含RBAC0,但各自都增加了獨立的特點,它們被稱為高級模型。
RBAC1中增加了角色分級的概念,一個角色可以從另一個角色繼承許可權。
RBAC2中增加了一些限制,強調在RBAC的不同組件中在配置方面的一些限制。
3、)RBAC3稱為統一模型,它包含了RBAC1和RBAC2,利用傳遞性,也把RBAC0包括在內。這些模型構成了RBAC96模型族。

二、基於RBAC的幾種權限體系設計
1、用戶-角色-權限
這種權限體系其實就是RBAC0的模式了。這里面又包含了2種:
- 用戶和角色是多對一關系,即:一個用戶只充當一種角色,一種角色可以有多個用戶擔當;
- 用戶和角色是多對多關系,即:一個用戶可同時充當好幾種角色,一種角色可以有多個用戶擔當;

如上圖:對於左邊的用戶-角色對應,每個人只能同時擁有一種角色,但是同一個角色里邊,可能會含有多個用戶(如:李四和王麻子都是業務員);而右邊的用戶-角色對應,是在左邊的基礎上,增加了一個用戶可擁有多種角色的情況(如:小馬哥既是經理,也要負責財務的工作);
那么,什么時候該使用多對一的權限體系,什么時候又該使用多對多的權限體系呢?
我的建議是:盡量可能地使用多對多的權限體系。如果這個系統的功能比較單一、使用人員較少、崗位權限相對清晰且不會出現兼崗的情況,這種情況也可以考慮用多對一的權限體系。
2、用戶-組織-角色-權限


在“用戶-角色-權限”的基礎上,我們增加了用戶與組織的關聯關系,組織決定了用戶的數據可視權限。但要想真正達到這個效果,我們還需要做2件事:
- 組織層級划分。如下圖,我們需要對組織進行梳理,並划分層級;
- 數據可視權限規則制定。比如:上級組織職能看到下級組織員工負責的數據,而不能看到其他平級組織及其下級組織的員工數據等。

通過以上兩點,系統就可以在用戶登錄時,自動判斷要給用戶展示哪些數據了。
3、用戶-組織-崗位-角色-權限
第三種權限體系又是在第二種權限體系上進行優化的,增加了用戶與崗位的關聯關系,示意圖如下:

增加崗位有以下幾點好處:
- 識別用戶的主要身份。一個人可能身兼多職(多個角色),但是他的主要職能是固定的,那怎么告訴系統用戶的主要職能是什么呢?答案就是:通過崗位!拿上面的小馬哥舉例:小馬哥雖然身兼經理和財務兩種身份,但他的本職工作是“經理”,因此,他的系統崗位應該“經理”。當他登錄時,系統會識別他的身份為“經理”,只不過這個“經理”剛好兼具了其他崗位的職能而已;
- 通過“組織-崗位”關聯,快速甄別用戶崗位。公司在不斷地發展的過程中,系統的用戶角色也會不斷增加,當角色達到一定數量以后,管理員每新增一個用戶都要花相當的時間去尋找角色。引入崗位后,可將組織和崗位、崗位和角色提前進行關聯,配置賬號時,管理員只要選定組織,系統就給出與該組織關聯的崗位,而這些崗位,又是提前關聯好角色的,選擇起來,既方便又高效!
文章參考:http://www.woshipm.com/pd/872372.html
https://www.cnblogs.com/vinozly/p/4851364.html
