基于RBAC模型的權(quán)限設(shè)計(jì):如何設(shè)計(jì)系統(tǒng)權(quán)限體系?

26 評(píng)論 65754 瀏覽 259 收藏 9 分鐘

RBAC目前使用最為廣泛的權(quán)限模型,筆者通過平常工作及工作外的積累,整理了幾種比較經(jīng)典的權(quán)限體系,希望對(duì)大家有所幫助!

一、什么是RABC

RBAC(基于角色的權(quán)限控制)模型的核心是在用戶和權(quán)限之間引入了角色的概念。取消了用戶和權(quán)限的直接關(guān)聯(lián),改為通過用戶關(guān)聯(lián)角色、角色關(guān)聯(lián)權(quán)限的方法來間接地賦予用戶權(quán)限(如下圖),從而達(dá)到用戶和權(quán)限解耦的目的。

RABC的好處

  1. 職能劃分更謹(jǐn)慎。對(duì)于角色的權(quán)限調(diào)整不僅僅只影響單個(gè)用戶,而是會(huì)影響關(guān)聯(lián)此角色的所有用戶,管理員下發(fā)/回收權(quán)限會(huì)更為謹(jǐn)慎;
  2. 便于權(quán)限管理。對(duì)于批量的用戶權(quán)限調(diào)整,只需調(diào)整用戶關(guān)聯(lián)的角色權(quán)限即可,無需對(duì)每一個(gè)用戶都進(jìn)行權(quán)限調(diào)整,既大幅提升權(quán)限調(diào)整的效率,又降低漏調(diào)權(quán)限的概率;

在不斷的發(fā)展過程中,RBAC也因不同的需求而演化出了不同的版本,目前主要有以下幾個(gè)版本:

  1. RBAC0,這是RBAC的初始形態(tài),也是最原始、最簡單的RBAC版本;
  2. RBAC1,基于RBAC0的優(yōu)化,增加了角色的分層(即:子角色),子角色可以繼承父角色的所有權(quán)限;
  3. RBAC2,基于RBAC0的另一種優(yōu)化,增加了對(duì)角色的一些限制:角色互斥、角色容量等;
  4. RBAC3,最復(fù)雜也是最全面的RBAC模型,它在RBAC0的基礎(chǔ)上,將RBAC1和RBAC2中的優(yōu)化部分進(jìn)行了整合;

二、基于RBAC的幾種權(quán)限體系設(shè)計(jì)

1、用戶-角色-權(quán)限

這種權(quán)限體系其實(shí)就是RBAC0的模式了。這里面又包含了2種:

  1. 用戶和角色是多對(duì)一關(guān)系,即:一個(gè)用戶只充當(dāng)一種角色,一種角色可以有多個(gè)用戶擔(dān)當(dāng);
  2. 用戶和角色是多對(duì)多關(guān)系,即:一個(gè)用戶可同時(shí)充當(dāng)好幾種角色,一種角色可以有多個(gè)用戶擔(dān)當(dāng);

如上圖:對(duì)于左邊的用戶-角色對(duì)應(yīng),每個(gè)人只能同時(shí)擁有一種角色,但是同一個(gè)角色里邊,可能會(huì)含有多個(gè)用戶(如:李四和王麻子都是業(yè)務(wù)員);而右邊的用戶-角色對(duì)應(yīng),是在左邊的基礎(chǔ)上,增加了一個(gè)用戶可擁有多種角色的情況(如:小馬哥既是經(jīng)理,也要負(fù)責(zé)財(cái)務(wù)的工作);

那么,什么時(shí)候該使用多對(duì)一的權(quán)限體系,什么時(shí)候又該使用多對(duì)多的權(quán)限體系呢?

我的建議是:盡量可能地使用多對(duì)多的權(quán)限體系。如果這個(gè)系統(tǒng)的功能比較單一、使用人員較少、崗位權(quán)限相對(duì)清晰且不會(huì)出現(xiàn)兼崗的情況,這種情況也可以考慮用多對(duì)一的權(quán)限體系。

2、用戶-組織-角色-權(quán)限

一般公司的業(yè)務(wù)管理系統(tǒng),都有數(shù)據(jù)私密性的要求:哪些人可以看到哪些數(shù)據(jù),哪些人不可以看到哪些數(shù)據(jù)。這個(gè)時(shí)候,我們就需要把這些東西也考慮到你的權(quán)限體系內(nèi)了。

假設(shè)上圖是一家公司業(yè)務(wù)部門的組織架構(gòu)圖,公司要求你基于這個(gè)組織架構(gòu)設(shè)計(jì)一個(gè)業(yè)務(wù)管理系統(tǒng),并要求系統(tǒng)需要滿足不同用戶的數(shù)據(jù)私密性,比如:“張三”登錄時(shí),只能看到“張三”負(fù)責(zé)的數(shù)據(jù);“張三”的領(lǐng)導(dǎo)登錄時(shí),能看到“團(tuán)隊(duì)A”的所有業(yè)務(wù)員負(fù)責(zé)的數(shù)據(jù),但看不到其他團(tuán)隊(duì)業(yè)務(wù)員負(fù)責(zé)的數(shù)據(jù)等等。

在這種情況下,上一種權(quán)限體系就不適用了,但我們可以對(duì)其進(jìn)行一些小改造后,即可達(dá)到數(shù)據(jù)管控的目的,如下圖:

在“用戶-角色-權(quán)限”的基礎(chǔ)上,我們?cè)黾恿擞脩襞c組織的關(guān)聯(lián)關(guān)系,組織決定了用戶的數(shù)據(jù)可視權(quán)限。但要想真正達(dá)到這個(gè)效果,我們還需要做2件事:

  1. 組織層級(jí)劃分。如下圖,我們需要對(duì)組織進(jìn)行梳理,并劃分層級(jí);
  2. 數(shù)據(jù)可視權(quán)限規(guī)則制定。比如:上級(jí)組織職能看到下級(jí)組織員工負(fù)責(zé)的數(shù)據(jù),而不能看到其他平級(jí)組織及其下級(jí)組織的員工數(shù)據(jù)等。

通過以上兩點(diǎn),系統(tǒng)就可以在用戶登錄時(shí),自動(dòng)判斷要給用戶展示哪些數(shù)據(jù)了!

3、用戶-組織-崗位-角色-權(quán)限

第三種權(quán)限體系又是在第二種權(quán)限體系上進(jìn)行優(yōu)化的,增加了用戶與崗位的關(guān)聯(lián)關(guān)系,示意圖如下:

增加崗位有以下幾點(diǎn)好處:

  1. 識(shí)別用戶的主要身份。一個(gè)人可能身兼多職(多個(gè)角色),但是他的主要職能是固定的,那怎么告訴系統(tǒng)用戶的主要職能是什么呢?答案就是:通過崗位!拿上面的小馬哥舉例:小馬哥雖然身兼經(jīng)理和財(cái)務(wù)兩種身份,但他的本職工作是“經(jīng)理”,因此,他的系統(tǒng)崗位應(yīng)該“經(jīng)理”。當(dāng)他登錄時(shí),系統(tǒng)會(huì)識(shí)別他的身份為“經(jīng)理”,只不過這個(gè)“經(jīng)理”剛好兼具了其他崗位的職能而已;
  2. 通過“組織-崗位”關(guān)聯(lián),快速甄別用戶崗位。公司在不斷地發(fā)展的過程中,系統(tǒng)的用戶角色也會(huì)不斷增加,當(dāng)角色達(dá)到一定數(shù)量以后,管理員每新增一個(gè)用戶都要花相當(dāng)?shù)臅r(shí)間去尋找角色。引入崗位后,可將組織和崗位、崗位和角色提前進(jìn)行關(guān)聯(lián),配置賬號(hào)時(shí),管理員只要選定組織,系統(tǒng)就給出與該組織關(guān)聯(lián)的崗位,而這些崗位,又是提前關(guān)聯(lián)好角色的,選擇起來,既方便又高效!

三、總結(jié)

以上是基于RBAC模型的三種權(quán)限體系,不難看出,三種權(quán)限體系的本質(zhì)都是用戶和權(quán)限進(jìn)行解耦,以達(dá)到權(quán)限的靈活運(yùn)用。

在最后,也給大家留下兩個(gè)小問題,大家有興趣的話可以思考下并在評(píng)論區(qū)寫出你的答案哦:

  1. 在不增加“組織”的情況下(即:第一種權(quán)限體系),能否達(dá)到數(shù)據(jù)私密性的控制?如何達(dá)到?
  2. 在第二種權(quán)限體系中,如何做到將“團(tuán)隊(duì)A”的員工和管理者設(shè)置在同一個(gè)組織下,但又能保證員工只能看到自己的數(shù)據(jù),而管理者可以看到該團(tuán)隊(duì)所有員工的數(shù)據(jù)?

 

本文由 @沒有昵稱 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自u(píng)nsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 我個(gè)人認(rèn)為兩個(gè)問題是否可以如下解決:
    1. 采用角色繼承的方式,如 經(jīng)理-》業(yè)務(wù)員,財(cái)務(wù),老板-》 經(jīng)理,這樣建立層級(jí)關(guān)系,達(dá)到數(shù)據(jù)范圍的控制。
    2. 在建立組織架構(gòu)樹時(shí),增加一個(gè)【是否管理人員】的標(biāo)識(shí)。在權(quán)限驗(yàn)證部分,讀取到管理人員標(biāo)識(shí)時(shí),則開放部門權(quán)限,否則,只開放個(gè)人權(quán)限。
    以上僅是針對(duì)上述兩個(gè)問題的粗略思考。

    實(shí)際過程中,行數(shù)據(jù)權(quán)限 我認(rèn)為至少應(yīng)包括4種模型,(1)所有數(shù)據(jù)權(quán)限 (2)縱向組織架構(gòu)權(quán)限 (3)橫向分管范圍權(quán)限 (4)個(gè)人權(quán)限

    在提一個(gè)小建議,上述文章中,重點(diǎn)描述了 用戶,組織,崗位,角色內(nèi)容,是否忽略了 權(quán)限 -》 資源部分內(nèi)容;即如何定義權(quán)限,定義資源;資源包括哪些,如何抽象,如何落地等。

    來自上海 回復(fù)
  2. 試著回答兩個(gè)問題,當(dāng)作是個(gè)人的讀后小結(jié)吧
    1,可以。方法: 每一條數(shù)據(jù)對(duì)應(yīng)到具體用戶,可以把原來的組織想象成一個(gè)用戶一個(gè)單獨(dú)的組織。
    2,可以。方法: 按組織取出數(shù)據(jù)的同時(shí),根據(jù)角色篩選。

    RBAC模型中,個(gè)人理解其實(shí)還有一層,也就是權(quán)限的分類:操作權(quán)限,資源權(quán)限。權(quán)限的概念,指的是對(duì)某資源(比如頁面,按鈕,數(shù)據(jù)庫中的某條(某些)數(shù)據(jù))是否允許某操作,所以有兩個(gè)層面的主體:資源與操作?;氐阶畛醯挠脩?權(quán)限模型,就是“某一個(gè)用戶,對(duì)某一個(gè)資源,允許某一些操作”的集合。然后在這個(gè)基礎(chǔ)上做分類和解耦

    來自上海 回復(fù)
  3. 通過 角色 做權(quán)限管理 和 通過 組織的邊界在哪?

    來自浙江 回復(fù)
  4. 樓主留的2個(gè)問題,我覺得是同一個(gè)問題。在不引入xx的情況下,實(shí)現(xiàn)數(shù)據(jù)的控制。有一個(gè)思路,在用戶級(jí),直接設(shè)定其上級(jí)用戶。

    來自江蘇 回復(fù)
  5. 感謝分享,超級(jí)受用。第一點(diǎn)里小標(biāo)題 “RABC的好處” RBAC RABC我也要看花眼啦 ??

    來自北京 回復(fù)
  6. 非常感謝作者的分享!有時(shí)間也很想把自己在權(quán)限方面的一些心得拿出來跟大家交流,因?yàn)樵跈?quán)限管理很重要很重要很重要,開始沒設(shè)計(jì)好,后面迭代起來非常的麻煩。
    1、第一個(gè)問題的本質(zhì)應(yīng)該是數(shù)據(jù)權(quán)限到底應(yīng)該如何控制的問題?要給劃分?jǐn)?shù)據(jù)的范圍,就必須給每一條數(shù)據(jù)打上一個(gè)可以用來劃分的標(biāo)識(shí)。那到底用什么來做標(biāo)識(shí),要根據(jù)數(shù)據(jù)劃分的需求來分析。文中提到的數(shù)據(jù)私密性的要求,就很容易讓人想到用組織架構(gòu)。因?yàn)槊恳粭l數(shù)據(jù)都是由用戶創(chuàng)建的,用戶又一定屬于某一個(gè)組織節(jié)點(diǎn),那數(shù)據(jù)肯定就一定會(huì)有組織節(jié)點(diǎn)。有沒有應(yīng)用場景是不需要根據(jù)組織架構(gòu)來劃分?jǐn)?shù)據(jù)權(quán)限的呢?當(dāng)然有,例如商業(yè)地產(chǎn)。數(shù)據(jù)的管理需求是根據(jù)項(xiàng)目來劃分的,那就需要我們?cè)谧霎a(chǎn)品設(shè)計(jì)的時(shí)候就考慮到,每一條數(shù)據(jù)的產(chǎn)生一定是屬于某一個(gè)項(xiàng)目的。那這時(shí)候,就可以根據(jù)項(xiàng)目這個(gè)標(biāo)識(shí)來劃分?jǐn)?shù)據(jù)權(quán)限的范圍。
    2、第二個(gè)問題就簡單一些,我們首先確認(rèn)每個(gè)用戶可以查看哪些組織節(jié)點(diǎn)的數(shù)據(jù),再加一層控制,可以查看這個(gè)節(jié)點(diǎn)下面自建的數(shù)據(jù)還是全部的數(shù)據(jù)就好了。

    來自廣東 回復(fù)
    1. 您好,我是做公寓租賃管理系統(tǒng)的,和您比較像,想請(qǐng)教您一個(gè)問題。數(shù)據(jù)權(quán)限的確是根據(jù)項(xiàng)目(或者樓棟)來劃分的,但系統(tǒng)不同模塊的數(shù)據(jù)是有公私之分的,例如:
      1.客戶管理模塊,同項(xiàng)目的兩個(gè)招商人員各自只能看到自己的客戶,而招商主管可以看到項(xiàng)目的所有客戶,如何在后臺(tái)配置呢?
      2.房源&合同管理模塊,同項(xiàng)目的兩個(gè)運(yùn)營人員都可以看到該項(xiàng)目的所有房源和合同,但是只能編輯和修改自己錄入的合同,這個(gè)要怎么配置呢?

      來自廣東 回復(fù)
    2. ??

      來自北京 回復(fù)
    3. 像這種情況應(yīng)該不需要設(shè)置。角色這塊已經(jīng)固定了。
      1.后臺(tái)只需要根據(jù)角色加上條件去查就行了。
      2.合同都有一個(gè)錄入人,前臺(tái)做判斷看運(yùn)營人員和錄入人員是否同一人就行啊。

      來自北京 回復(fù)
    4. 你說的非常好!厲害

      來自廣東 回復(fù)
  7. 1:我對(duì)于作者問的第一個(gè)問題其實(shí)不是很清晰。
    2:RABC模型的解釋是 基于角色的權(quán)限控制,所以我們可以在角色這里思考。建立角色組和父子角色概念,對(duì)于一個(gè)團(tuán)隊(duì)而言,每個(gè)成員有一個(gè)或多個(gè)角色,把每個(gè)成員的角色歸屬到一個(gè)角色組里面,在把角色組給團(tuán)隊(duì)leader,leader就擁有整個(gè)團(tuán)隊(duì)的權(quán)限。應(yīng)為作者說 了這里是團(tuán)隊(duì)的 leader和團(tuán)隊(duì)成員是屬于同級(jí)組織里面。當(dāng)我們的組織結(jié)構(gòu)樹往上走的時(shí)候,當(dāng)為這個(gè)管理幾個(gè)團(tuán)隊(duì)的領(lǐng)導(dǎo)奉陪權(quán)限的時(shí)候,我們就可以引入父子角色概念。

    來自北京 回復(fù)
  8. “比如:上級(jí)組織職能看到下級(jí)組織員工負(fù)責(zé)的數(shù)據(jù),而不能看到其他平級(jí)組織及其下級(jí)組織的員工數(shù)據(jù)等?!边@一句的后半句是不是應(yīng)該為“及其上級(jí)組織員工” ?

    來自北京 回復(fù)
    1. 【其他平級(jí)組織及其下級(jí)組織的員工數(shù)據(jù)】這個(gè)是一句話

      來自陜西 回復(fù)
  9. “比如:上級(jí)組織職能看到下級(jí)組織員工負(fù)責(zé)的數(shù)據(jù),而不能看到其他平級(jí)組織及其下級(jí)組織的員工數(shù)據(jù)等。”這一句的后半句是不是應(yīng)該為“及其上級(jí)組織員工” ?

    來自北京 回復(fù)
  10. 感謝作者的分享~

    回答一下上面的問題:我的理解,問題一和問題二都是把團(tuán)隊(duì)的員工和該團(tuán)隊(duì)的管理者放在了一個(gè)目錄下,普通員工只能看到自己的數(shù)據(jù),而管理者可以看到該團(tuán)隊(duì)的數(shù)據(jù),我想應(yīng)該建一個(gè)“管理者”的角色,配置到團(tuán)隊(duì),即有該角色的用戶就可以查看對(duì)應(yīng)團(tuán)隊(duì)所有數(shù)據(jù)的權(quán)限,否則只能查看自己的數(shù)據(jù)。

    來自北京 回復(fù)
    1. 數(shù)據(jù)權(quán)限與角色是無關(guān)的。角色是控制操作權(quán)限的,組織是控制數(shù)據(jù)權(quán)限的

      來自廣東 回復(fù)
  11. 我做的也是RBAC的改進(jìn),不過我設(shè)計(jì)的是將權(quán)限分為操作權(quán)限和資源權(quán)限,操作權(quán)限的集合即為角色,資源權(quán)限的集合為職位,角色表示了該角色的用戶所能進(jìn)行的操作,職位表示該用戶所能操作的資源,職位相當(dāng)于每一個(gè)權(quán)限所對(duì)應(yīng)的資源列表。
    問題一:權(quán)限在定向圖中從上向下流動(dòng),上級(jí)角色為父角色,下級(jí)角色為子角色,權(quán)限由父角色為子角色分配。相同角色的用戶擁有不同職位,實(shí)現(xiàn)數(shù)據(jù)私密性。
    問題二:我覺得組織機(jī)構(gòu)和權(quán)限系統(tǒng)是分開的,因?yàn)楦缸咏巧呀?jīng)可以實(shí)現(xiàn)子角色的權(quán)限是父角色的子集,同時(shí)還能實(shí)現(xiàn)當(dāng)有多個(gè)上級(jí)時(shí),每個(gè)上級(jí)的權(quán)限都只能看到自己能管理的數(shù)據(jù),無法看到子角色所有數(shù)據(jù)。

    來自浙江 回復(fù)
    1. 有這樣一個(gè)場景,若幾個(gè)相同職位的人,寫了同一份資源列表,如何管理他們使得他們只能看到列表中自己創(chuàng)建的那部分資源數(shù)據(jù)。這才是數(shù)據(jù)權(quán)限問題,因此其實(shí)你對(duì)數(shù)據(jù)權(quán)限和操作權(quán)限的理解有誤

      來自廣東 回復(fù)
    2. 是的,17年的時(shí)候?qū)@塊了解不夠深入。問題二現(xiàn)在想想也只有在組織上再加一層控制,管理員數(shù)據(jù)權(quán)限等于組織,其他用戶的數(shù)據(jù)權(quán)限除了自己建的以外需要管理員授權(quán)

      來自上海 回復(fù)
  12. 寫得很通俗易懂,受用

    回復(fù)
  13. 感謝作者的分享~
    小答一下兩個(gè)問題:
    問題一:可以達(dá)到。如果沒有“組織”,可以根據(jù)需求在權(quán)限部分建立子分類,比如編輯權(quán)限下可以分為編輯A區(qū)域內(nèi)容、編輯B區(qū)域內(nèi)容。
    問題二:這個(gè)問題沒太明白作者的意圖,因?yàn)樵谖恼轮幸呀?jīng)提到了答案——設(shè)定數(shù)據(jù)可視權(quán)限規(guī)則

    來自北京 回復(fù)