RBAC權(quán)限模型——理論篇

1 評論 7071 瀏覽 56 收藏 15 分鐘

企業(yè)在初期發(fā)展時,是以線下業(yè)務(wù)為主。但之后的發(fā)展,隨著線上產(chǎn)品做得越深,權(quán)限管理也會更復(fù)雜,因此在開始的時候就應(yīng)該著手準(zhǔn)備。下面是筆者整理分享的關(guān)于RBAC權(quán)限設(shè)計的理論知識內(nèi)容,大家一起往下看看吧!

在企業(yè)快速發(fā)展的初期,通常以線下業(yè)務(wù)為核心戰(zhàn)略目標(biāo)。隨著公司的快速發(fā)展,線上產(chǎn)品做的越來越深,導(dǎo)致權(quán)限管理的復(fù)雜性增加,特別是在大型組織中。

管理大量用戶的權(quán)限可能會變得混亂,難以維護(hù)。等到后期需求堆疊困難時候,才想到權(quán)限梳理的問題。所以在產(chǎn)品初期就應(yīng)該有權(quán)限分配的意識。

一、傳統(tǒng)權(quán)限

企業(yè)攻城拔寨的早期階段,IT產(chǎn)品業(yè)務(wù)線較為單一,研發(fā)部小步快跑迎合業(yè)務(wù)往往最初的產(chǎn)品需求。而且公司高層變動較大,每當(dāng)新來一個leader都臨時賦予給他最高或部分權(quán)限。所以傳統(tǒng)權(quán)限分配或都是直接授予用戶,而不涉及角色的概念。在這種模型下,每個用戶被賦予特定的權(quán)限,而不考慮用戶是否屬于某個角色或組。

這里拿西游記舉個例子,可以看出唐僧和孫悟空對應(yīng)的“經(jīng)文”是系統(tǒng)直接授予的。這時候,如果再來一個豬八戒那我們需要再次對“經(jīng)文”勾選查看或者編輯權(quán)限。

但是當(dāng)我們的取經(jīng)隊伍足夠大的時候,再去一個個按照人名去勾選權(quán)限維護(hù)起來肯定是困難的,那我們該如何更有效的管理我們的取經(jīng)隊伍?這時引入RBAC模型,它可以更輕松地處理用戶的權(quán)限。

二、RBAC模型是什么?

RBAC是指”基于角色的訪問控制”(Role-Based Access Control)。它是一種訪問控制的安全模型,通過將權(quán)限分配給角色,然后將角色分配給用戶,來管理系統(tǒng)中的用戶訪問。RBAC的核心思想是將用戶的權(quán)限與其角色關(guān)聯(lián),而不是直接將權(quán)限授予用戶。

  1. 用戶(User):系統(tǒng)的最終使用者,可以被分配一個或多個角色。
  2. 角色(Role):定義了一組相關(guān)權(quán)限的命名集合。用戶可以被分配到一個或多個角色。
  3. 權(quán)限(Permission):描述了可以執(zhí)行的操作或訪問的資源。權(quán)限與角色相關(guān)聯(lián),用戶通過分配到角色而獲得相應(yīng)的權(quán)限。
  4. 訪問控制矩陣(Access Control Matrix):顯示了用戶、角色和權(quán)限之間的關(guān)系,以及誰可以執(zhí)行什么操作的表格。

接著上面的案例,當(dāng)我們的系統(tǒng)加入豬八戒和沙悟凈這兩個人物時,按照傳統(tǒng)的權(quán)限分配模式,我們需要分別對每個人授予權(quán)限,那如果使用RBAC模型,我們將系統(tǒng)中加入角色。這時候只需要把“孫悟空”“豬八戒”“沙悟凈”賦予徒弟這個角色后,后續(xù)修改徒弟的權(quán)限,即可修改給所有的徒弟。

相比之下,RBAC引入了角色的概念,將權(quán)限與角色相關(guān)聯(lián),然后將角色分配給用戶。這種方式使得權(quán)限管理更為靈活和可維護(hù),因為只需要管理角色的權(quán)限,而不是每個用戶的權(quán)限。這對于大型組織或復(fù)雜系統(tǒng)來說是一種更有效的權(quán)限管理方法。

三、多角色權(quán)限

當(dāng)一個人具有多個角色時,RBAC允許用戶同時擁有多個角色。這樣的設(shè)計使得系統(tǒng)更加靈活,能夠更好地適應(yīng)組織結(jié)構(gòu)和復(fù)雜的訪問需求。在RBAC中,用戶和角色之間的關(guān)系可以是多對一或多對多,具體取決于系統(tǒng)的設(shè)計需求和安全策略。

  1. 多對一(Many-to-One):多個用戶映射到同一個角色。這表示多個用戶共享相同的角色,但每個用戶在系統(tǒng)中只屬于一個角色。
  2. 多對多(Many-to-Many):一個用戶可以映射到多個角色,同時一個角色可以包含多個用戶。這表示用戶和角色之間存在更為靈活的關(guān)系,一個用戶可以在系統(tǒng)中屬于多個角色,而一個角色也可以包含多個用戶。

四、多角色權(quán)限處理方式

在RBAC中,有兩種常見的處理多角色的方式:

  1. 合并權(quán)限: 用戶被賦予所有角色的權(quán)限。這意味著用戶將擁有他所屬的每個角色的權(quán)限。
  2. 最小化權(quán)限: 用戶只被賦予他所屬的所有角色共同的權(quán)限。這種方式確保用戶只能執(zhí)行他所有角色共同具有的權(quán)限,而不是所有角色的權(quán)限總和。

例如,如果“蜈蚣精”同時具有“飛天怪”和“潛水怪”兩個角色,而這兩個角色分別具有不同的權(quán)限。這時候若使用合并權(quán)限的邏輯,則“蜈蚣精”同時擁有“飛天”“地面”“潛水”三個技能,若使用最小化權(quán)限邏輯,則“蜈蚣精”只有“地面”技能。

因此如何選擇合適的方法取決于系統(tǒng)的安全需求和設(shè)計目標(biāo)。在某些情況下,可能需要靈活性更大,因此采用合并權(quán)限的方式。在其他情況下,為了確保最小的權(quán)限原則,可能會選擇最小化權(quán)限的方式。

五、模型分類

讀到現(xiàn)在你應(yīng)該對RBAC已經(jīng)有了初步的認(rèn)識,甚至可以適配一些業(yè)務(wù)場景。但是在真實的工作中,往往業(yè)務(wù)比我們想象的要復(fù)雜,那么我們需要有更進(jìn)階的模型方式去處理我們的業(yè)務(wù),首先RBAC一共有4種模型,分別是RBAC0(基礎(chǔ)模型)、RBAC1(基礎(chǔ)模型)、RBAC2(角色限制模型)、RBAC3(統(tǒng)一模型)。

1. RBAC0(基礎(chǔ)模型)

最基本的 RBAC 實現(xiàn),包括角色、用戶和權(quán)限的概念。在這個級別上,訪問控制比較簡單,可能不包括角色的層次結(jié)構(gòu)或其他復(fù)雜的功能。

就比如我們剛剛的舉例:角色:徒弟;權(quán)限:查看經(jīng)文,編輯經(jīng)文。

2. RBAC1(繼承模型)

引入了高級用戶的概念,如角色的層次結(jié)構(gòu)、繼承權(quán)限等。高級用戶可能具有比普通用戶更多的權(quán)限,例如刪除其他用戶的文章。同時,管理員仍然擁有更高級別的權(quán)限。

角色:師傅;權(quán)限:可以查看并編輯徒弟的經(jīng)文,但是徒弟只能編輯和查看自己的。同時可以刪除自己和徒弟的經(jīng)文。

3. RBAC2(角色限制模型)

他是RBAC 模型的演進(jìn),通過引入更多的約束和規(guī)則,以滿足實際業(yè)務(wù)中對角色分配的特定需求。這里的約束關(guān)系主要包含靜態(tài)分離和動態(tài)分析,靜態(tài)分離是指互斥的角色不能同時賦予同一個用戶;動態(tài)分離指用戶不能同時操作兩個互斥的角色進(jìn)行登錄。

1)動態(tài)分離

動態(tài)分離是指在用戶操作階段,確保用戶不能同時操作兩個互斥的角色,即用戶不能同時登錄并執(zhí)行涉及到互斥角色的操作。

例:即使我現(xiàn)在又是師傅又是徒弟,但是我在系統(tǒng)操作的時候,我不能同時操作兩個角色。比如我是師傅時候我就不能降妖除魔,防止?jié)撛诘臉I(yè)務(wù)沖突

2)靜態(tài)分離

靜態(tài)分離是指在角色分配的靜態(tài)配置階段就確保某些角色是互斥的,不能同時賦予同一個用戶。這樣的限制可以通過在 RBAC 模型中定義互斥關(guān)系或者強(qiáng)制性的角色分離規(guī)則來實現(xiàn)。

例:在西游記中定義師傅和徒弟角色為互斥的,系統(tǒng)在進(jìn)行角色分配時會檢查這一規(guī)則,確保一個用戶不能同時擁有師傅和徒弟角色。

3)動態(tài)分離和靜態(tài)主要有三種約束形式

a、互斥角色:互斥關(guān)系角色指的是在某些情況下,兩個或多個角色是互斥的,即它們不能同時分配給同一個用戶。這是一種靜態(tài)的限制,通常在角色分配的靜態(tài)配置階段就確定。

b、基數(shù)約束:基數(shù)約束涉及到限制用戶能夠擁有的角色數(shù)量,或者某個角色在系統(tǒng)中的實例數(shù)。這種約束可以是靜態(tài)的,也可以是動態(tài)的,取決于在哪個階段進(jìn)行約束的檢查。

c、先決條件約束:先決條件角色是指在分配某個角色之前,用戶必須先擁有另一個或一組先決條件角色。這種機(jī)制可以用于確保用戶在獲得某個高級別角色之前必須具備一定的背景或權(quán)限。

4. RBAC3(統(tǒng)一模型)

很多人說 RBAC3=RBAC1+RBAC2,雖然在某些方面有相似之處,但它們并不是簡單的加法關(guān)系。RBAC3 通常被認(rèn)為是對 RBAC 模型的更進(jìn)一步的增強(qiáng)。RBAC1 引入了角色的層次結(jié)構(gòu)和權(quán)限繼承的概念,增加了靈活性和簡化了權(quán)限管理。RBAC2 在 RBAC1 的基礎(chǔ)上引入了動態(tài)任務(wù)權(quán)限的概念,使得權(quán)限的分配更加靈活和動態(tài)。RBAC3 進(jìn)一步提高了安全性和靈活性,引入了更高級的審計功能、自定義安全策略、高級用戶管理等。

例:

  • 角色:徒弟(悟空)。權(quán)限: 查看經(jīng)文,編輯經(jīng)文。
  • 角色:師傅(三藏)。權(quán)限: 除了查看經(jīng)文,編輯經(jīng)文。增加了刪除經(jīng)文。
  • 角色:仙班(玉帝)。權(quán)限: 除了師傅的權(quán)限外,還能創(chuàng)建創(chuàng)建經(jīng)文,評估徒弟表現(xiàn)。
  • 角色:教主(如來)。權(quán)限: 除了仙班的權(quán)限外,還能調(diào)整創(chuàng)建經(jīng)文平臺的設(shè)置、審計平臺活動。
  • 特殊情況下的動態(tài)調(diào)整: 在某些特殊情況下,可以靈活地調(diào)整權(quán)限,例如允許一個關(guān)卡有兩位首領(lǐng)。
  • 角色分配先決條件:想成為如來,必須先是師傅。

六、用戶組

現(xiàn)在我們已經(jīng)了解了RBAC模型的概念,但是對于更復(fù)雜的企業(yè)來說維護(hù)起來的工作量還是及其龐大和繁瑣的。

針對這種情況,往往我們可以將相同權(quán)限的角色進(jìn)行合并成用戶組。這樣可以簡化權(quán)限管理。同時也可以讓用戶組織更為清晰。這時候我們再看第一個案例,那么孫悟空、豬八戒、沙悟凈就是一個取經(jīng)團(tuán)隊,也就是用戶組。

七、總結(jié)

不管使用哪種模型,只有適合當(dāng)下的業(yè)務(wù)才是最好的。畢竟在公司發(fā)展的不同階段,所投入的研發(fā)資源不同,產(chǎn)品的定位也會隨著戰(zhàn)略的調(diào)整而調(diào)整。當(dāng)然在初期產(chǎn)品規(guī)劃的時候還是要有全局觀,防止后面業(yè)務(wù)調(diào)整的時候所造成較大的修改成本。

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

題圖來自 Unsplash,基于 CC0 協(xié)議

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. mark,mark,mark

    來自北京 回復(fù)