B端權(quán)限規(guī)則模型:RBAC模型
導(dǎo)讀:B端項(xiàng)目上,需要設(shè)計(jì)實(shí)現(xiàn)一個(gè)權(quán)限管理模塊,就要知道到一個(gè)很重要的RBAC模型,所以整理總結(jié)了RBAC的一些知識(shí)。目前,使用最普遍的權(quán)限管理模型正是RBAC(Role-Based Access Control)模型,這篇文章主要是介紹基于RBAC的權(quán)限管理系統(tǒng),將會(huì)從RBAC是什么、如何設(shè)計(jì)RBAC兩部分來(lái)介紹。
一、RBAC模型是什么?
1. RBAC模型概述
RBAC模型(Role-Based Access Control:基于角色的訪問(wèn)控制)模型是20世紀(jì)90年代研究出來(lái)的一種新模型,但其實(shí)在20世紀(jì)70年代的多用戶計(jì)算時(shí)期,這種思想就已經(jīng)被提出來(lái),直到20世紀(jì)90年代中后期,RBAC才在研究團(tuán)體中得到一些重視,并先后提出了許多類型的RBAC模型。其中以美國(guó)George Mason大學(xué)信息安全技術(shù)實(shí)驗(yàn)室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公認(rèn)。
RBAC認(rèn)為權(quán)限授權(quán)的過(guò)程可以抽象地概括為:Who是否可以對(duì)What進(jìn)行How的訪問(wèn)操作,并對(duì)這個(gè)邏輯表達(dá)式進(jìn)行判斷是否為True的求解過(guò)程,也即是將權(quán)限問(wèn)題轉(zhuǎn)換為What、How的問(wèn)題,Who、What、How構(gòu)成了訪問(wèn)權(quán)限三元組,具體的理論可以去調(diào)查RBAC96的研究文件,這里就不做詳細(xì)的展開(kāi)介紹,讓大家有個(gè)了解和即可。
2. RBAC的組成
在RBAC模型里面,有3個(gè)基礎(chǔ)組成部分,分別是:用戶、角色和權(quán)限。
RBAC通過(guò)定義角色的權(quán)限,并對(duì)用戶授予某個(gè)角色從而來(lái)控制用戶的權(quán)限,實(shí)現(xiàn)了用戶和權(quán)限的邏輯分離(區(qū)別于ACL模型),極大地方便了權(quán)限的管理。
下面在講解之前,先介紹一些名詞:
User(用戶):每個(gè)用戶都有唯一的UID識(shí)別,并被授予不同的角色
Role(角色):不同角色具有不同的權(quán)限
Permission(權(quán)限):訪問(wèn)權(quán)限
用戶-角色映射:用戶和角色之間的映射關(guān)系
角色-權(quán)限映射:角色和權(quán)限之間的映射
它們之間的關(guān)系如下圖所示:
例如下圖,管理員和普通用戶被授予不同的權(quán)限,普通用戶只能去修改和查看個(gè)人信息,而不能創(chuàng)建創(chuàng)建用戶和凍結(jié)用戶,而管理員由于被授 予所有權(quán)限,所以可以做所有操作。
例如下圖,管理員和普通用戶被授予不同的權(quán)限,普通用戶只能去修改和查看個(gè)人信息,而不能創(chuàng)建創(chuàng)建用戶和凍結(jié)用戶,而管理員由于被授予所有權(quán)限,所以可以做所有操作。
3. RBAC支持的安全原則
RBAC支持三個(gè)著名的安全原則:最小權(quán)限原則、責(zé)任分離原則和數(shù)據(jù)抽象原則。
最小權(quán)限原則:RBAC可以將角色配置成其完成任務(wù)所需的最小權(quán)限集合。
責(zé)任分離原則:可以通過(guò)調(diào)用相互獨(dú)立互斥的角色來(lái)共同完成敏感的任務(wù),例如要求一個(gè)計(jì)賬員和財(cái)務(wù)管理員共同參與統(tǒng)一過(guò)賬操作。
數(shù)據(jù)抽象原則:可以通過(guò)權(quán)限的抽象來(lái)體現(xiàn),例如財(cái)務(wù)操作用借款、存款等抽象權(quán)限,而不是使用典型的讀、寫、執(zhí)行權(quán)限。
4. RBAC的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):簡(jiǎn)化了用戶和權(quán)限的關(guān)系易擴(kuò)展、易維護(hù)。
缺點(diǎn):RBAC模型沒(méi)有提供操作順序的控制機(jī)制,這一缺陷使得RBAC模型很難適應(yīng)哪些對(duì)操作次序有嚴(yán)格要求的系統(tǒng)。
5. RBAC的3種模型
1)RBAC0
RBAC0,是最簡(jiǎn)單、最原始的實(shí)現(xiàn)方式,也是其他RBAC模型的基礎(chǔ)。
在該模型中,用戶和角色之間可以是多對(duì)多的關(guān)系,即一個(gè)用戶在不同場(chǎng)景下是可以有不同的角色,例如:項(xiàng)目經(jīng)理也可能是組長(zhǎng)也可能是架構(gòu)師。同時(shí)每個(gè)角色都至少有一個(gè)權(quán)限。這種模型下,用戶和權(quán)限被分離獨(dú)立開(kāi)來(lái),使得權(quán)限的授權(quán)認(rèn)證更加靈活。
A、權(quán)限是用戶可以訪問(wèn)的資源,包括頁(yè)面權(quán)限、操作權(quán)限、數(shù)據(jù)權(quán)限。
a、頁(yè)面權(quán)限:即用戶登錄系統(tǒng)可以看到的頁(yè)面,由菜單來(lái)控制,菜單包括一級(jí)菜單和二級(jí)菜單,只要用戶有一級(jí)和二級(jí)菜單的權(quán)限,那么用戶就可以訪問(wèn)頁(yè)面。
b、操作權(quán)限: 即頁(yè)面的功能按鈕,包括查看、新增、修改、刪除、審核等,用戶點(diǎn)擊刪除按鈕時(shí),后臺(tái)會(huì)校驗(yàn)用戶角色下的所有權(quán)限是否包含該刪除權(quán)限,如果是,就可以進(jìn)行下一步操作,反之提示無(wú)權(quán)限。有的系統(tǒng)要求”可見(jiàn)即可操作”,意思是如果頁(yè)面上能夠看到操作按鈕,那么用戶就可以操作,要實(shí)現(xiàn)此需求,這里就需要前端來(lái)配合,前端開(kāi)發(fā)把用戶的權(quán)限信息緩存,在頁(yè)面判斷用戶是否包含此權(quán)限,如果有,就顯示該按鈕,如果沒(méi)有,就隱藏該按鈕。某種程度上提升了用戶體驗(yàn),但是在實(shí)際場(chǎng)景可自行選擇是否需要這樣做。
c、數(shù)據(jù)權(quán)限:數(shù)據(jù)權(quán)限就是用戶在同一頁(yè)面看到的數(shù)據(jù)是不同的,比如財(cái)務(wù)部只能看到其部門下的用戶數(shù)據(jù),采購(gòu)部只看采購(gòu)部的數(shù)據(jù),在一些大型的公司,全國(guó)有很多城市和分公司,比如杭州用戶登錄系統(tǒng)只能看到杭州的數(shù)據(jù),上海用戶只能看到上海的數(shù)據(jù),解決方案一般是把數(shù)據(jù)和具體的組織架構(gòu)關(guān)聯(lián)起來(lái),舉個(gè)例子,再給用戶授權(quán)的時(shí)候,用戶選擇某個(gè)角色同時(shí)綁定組織如財(cái)務(wù)部或者合肥分公司,那么該用戶就有了該角色下財(cái)務(wù)部或合肥分公司下的的數(shù)據(jù)權(quán)限。
2)RBAC1
基于RBAC0模型,引入了角色間的繼承關(guān)系,即角色上有了上下級(jí)的區(qū)別。
角色間的繼承關(guān)系可分為一般繼承關(guān)系和受限繼承關(guān)系。一般繼承關(guān)系僅要求角色繼承關(guān)系是一個(gè)絕對(duì)偏序關(guān)系,允許角色間的多繼承。而受限繼承關(guān)系則進(jìn)一步要求角色繼承關(guān)系是一個(gè)樹(shù)結(jié)構(gòu),實(shí)現(xiàn)角色間的單繼承。
A、數(shù)據(jù)范圍的繼承
我們可以將用戶進(jìn)行分級(jí)管理,比如建立多層級(jí)的組織架構(gòu)樹(shù),將不同用戶放置于組織架構(gòu)的不同根節(jié)點(diǎn)上,來(lái)實(shí)現(xiàn)多層級(jí)用戶的建立和管理。
如果用戶的層級(jí)如果比較簡(jiǎn)單(不多于三級(jí)),可以將層級(jí)關(guān)系融入到角色之中。
比如用戶分為三級(jí):管理員-組長(zhǎng)-組員,管理員能看到全部的數(shù)據(jù)范圍和擁有全部的功能權(quán)限,而組長(zhǎng)能查看組員的數(shù)據(jù)范圍和擁有部分功能權(quán)限(比如無(wú)法編輯用戶),而組員的數(shù)據(jù)范圍僅僅為自己負(fù)責(zé)的數(shù)據(jù)和擁有部分功能權(quán)限。
我們可以在組長(zhǎng)這個(gè)角色下,允許其綁定組員,針對(duì)不同的角色設(shè)置不同的數(shù)據(jù)范圍讀取方式,管理員可以讀取全部數(shù)據(jù)范圍,組長(zhǎng)需要讀取其組員的,組員只能讀取自己的。這種模型適合于角色之間層次分明,可以給角色分組分層。
RBAC2:
RBAC2,基于RBAC0模型的基礎(chǔ)上,進(jìn)行了角色的訪問(wèn)控制。
RBAC2中的一個(gè)基本限制是互斥角色的限制,互斥角色是指各自權(quán)限可以互相制約的兩個(gè)角色。對(duì)于這類角色一個(gè)用戶在某一次活動(dòng)中只能被分配其中的一個(gè)角色,不能同時(shí)獲得兩個(gè)角色的使用權(quán)。
該模型有以下幾種約束:
互斥角色 :同一用戶只能分配到一組互斥角色集合中至多一個(gè)角色,支持責(zé)任分離的原則。互斥角色是指各自權(quán)限互相制約的兩個(gè)角色。對(duì)于這類角色一個(gè)用戶在某一次活動(dòng)中只能被分配其中的一個(gè)角色,不能同時(shí)獲得兩個(gè)角色的使用權(quán)。常舉的例子:在審計(jì)活動(dòng)中,一個(gè)角色不能同時(shí)被指派給會(huì)計(jì)角色和審計(jì)員角色。
基數(shù)約束 :一個(gè)角色被分配的用戶數(shù)量受限;一個(gè)用戶可擁有的角色數(shù)目受限;同樣一個(gè)角色對(duì)應(yīng)的訪問(wèn)權(quán)限數(shù)目也應(yīng)受限,以控制高級(jí)權(quán)限在系統(tǒng)中的分配。例如公司的領(lǐng)導(dǎo)人有限的;
先決條件角色 :可以分配角色給用戶僅當(dāng)該用戶已經(jīng)是另一角色的成員;對(duì)應(yīng)的可以分配訪問(wèn)權(quán)限給角色,僅當(dāng)該角色已經(jīng)擁有另一種訪問(wèn)權(quán)限。指要想獲得較高的權(quán)限,要首先擁有低一級(jí)的權(quán)限。
運(yùn)行時(shí)互斥 :例如,允許一個(gè)用戶具有兩個(gè)角色的成員資格,但在運(yùn)行中不可同時(shí)激活這兩個(gè)角色。
RBAC3:
最全面的權(quán)限管理,它是基于RBAC0,將RBAC1和RBAC2進(jìn)行了整合。
二、如何設(shè)計(jì)RBAC?
介紹設(shè)計(jì)基于RBAC模型的權(quán)限系統(tǒng)的功能模塊組成、流程以及數(shù)據(jù)庫(kù)的設(shè)計(jì)。
1. RBAC的功能模塊
2. RBAC執(zhí)行流程
3. RBAC數(shù)據(jù)庫(kù)設(shè)計(jì)
4. 用戶組
平臺(tái)用戶基數(shù)增大,角色類型增多時(shí),而且有一部分人具有相同的屬性,比如財(cái)務(wù)部的所有員工,如果直接給用戶分配角色,管理員的工作量就會(huì)很大,如果把相同屬性的用戶歸類到某用戶組,那么管理員直接給用戶組分配角色,用戶組里的每個(gè)用戶即可擁有該角色,以后其他用戶加入用戶組后,即可自動(dòng)獲取用戶組的所有角色,退出用戶組,同時(shí)也撤銷了用戶組下的角色,無(wú)須管理員手動(dòng)管理角色。
根據(jù)用戶組是否有上下級(jí)關(guān)系,可以分為有上下級(jí)的用戶組和普通用戶組。
具有上下級(jí)關(guān)系的用戶組:最典型的例子就是部門和職位,可能多數(shù)人沒(méi)有把部門職位和用戶組關(guān)聯(lián)起來(lái)吧。當(dāng)然用戶組是可以拓展的,部門和職位常用于內(nèi)部的管理系統(tǒng),如果是面向C端的系統(tǒng),比如淘寶網(wǎng)的商家,商家自身也有一套組織架構(gòu),比如采購(gòu)部,銷售部,客服部,后勤部等,有些人擁有客服權(quán)限,有些人擁有上架權(quán)限等等,所以用戶組是可以拓展的。
普通用戶組:即沒(méi)有上下級(jí)關(guān)系,和組織架構(gòu),職位都沒(méi)有關(guān)系,也就是說(shuō)可以跨部門,跨職位,舉個(gè)例子,某電商后臺(tái)管理系統(tǒng),有拼團(tuán)活動(dòng)管理角色,我們可以設(shè)置一個(gè)拼團(tuán)用戶組,該組可以包括研發(fā)部的后臺(tái)開(kāi)發(fā)人員,運(yùn)營(yíng)部的運(yùn)營(yíng)人員,采購(gòu)部的人員等等。
5. 組織
常見(jiàn)的組織架構(gòu)如下圖:
可以把組織與角色進(jìn)行關(guān)聯(lián),用戶加入組織后,就會(huì)自動(dòng)獲得該組織的全部角色,無(wú)須管理員手動(dòng)授予,大大減少工作量,同時(shí)用戶在調(diào)崗時(shí),只需調(diào)整組織,角色即可批量調(diào)整。
6. 授權(quán)流程
授權(quán)即給用戶授予角色,按流程可分為手動(dòng)授權(quán)和審批授權(quán)。權(quán)限中心可同時(shí)配置這兩種,可提高授權(quán)的靈活性。
手動(dòng)授權(quán):管理員登錄權(quán)限中心為用戶授權(quán),根據(jù)在哪個(gè)頁(yè)面授權(quán)分為兩種方式:給用戶添加角色,給角色添加用戶。
給用戶添加角色就是在用戶管理頁(yè)面,點(diǎn)擊某個(gè)用戶去授予角色,可以一次為用戶添加多個(gè)角色;給角色添加用戶就是在角色管理頁(yè)面,點(diǎn)擊某個(gè)角色,選擇多個(gè)用戶,實(shí)現(xiàn)了給批量用戶授予角色的目的。
審批授權(quán):即用戶申請(qǐng)某個(gè)職位角色,那么用戶通過(guò)OA流程申請(qǐng)?jiān)摻巧?,然后由上?jí)審批,該用戶即可擁有該角色,不需要系統(tǒng)管理員手動(dòng)授予。
三、整理總結(jié):
1. RBACM模型
RBAC0、RBAC1、RBAC2、RBAC3
RBAC0:是RBAC的核心思想。
RBAC1:RBAC基礎(chǔ)上增加了角色分層模型。
RBAC2:RBAC基礎(chǔ)上增加了約束模型。
RBAC3:其實(shí)是RBAC2 + RBAC1。
2. 權(quán)限
1) 權(quán)限賦予
權(quán)限賦予是把當(dāng)前用戶的權(quán)限拉出來(lái),然后分配的客服可以小于等于當(dāng)前用戶的權(quán)限。
2) 權(quán)限加載
正常的加載權(quán)限,當(dāng)用戶登錄后,并且第一次使用權(quán)限判斷的時(shí)候, Shiro(頁(yè)面框架) 會(huì)去加載權(quán)限。
3) 權(quán)限判斷
走正常用戶權(quán)限判斷,但是數(shù)據(jù)操作需要判斷是不是當(dāng)前歸屬的用戶的數(shù)據(jù),其實(shí)這個(gè)是屬于業(yè)務(wù)層,就算你不是客服,也是需要判斷。
(4) 禁用|啟用
禁用啟用,也是正常的用戶流程,添加到禁用列表里,如果被禁用,就無(wú)法操作任何內(nèi)容。
本文由 @K 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自 Pexels,基于 CC0 協(xié)議
問(wèn)個(gè)問(wèn)題,如果某列表頁(yè)面,對(duì)于A和B兩個(gè)角色,查看時(shí)候展示列有小部分區(qū)別,該如何設(shè)計(jì)呢?
界面權(quán)限,標(biāo)簽權(quán)限,字段權(quán)限進(jìn)行權(quán)限管理配置設(shè)計(jì),可以考慮后期的靈活配置。
還要考慮產(chǎn)品屬性
產(chǎn)品書籍免費(fèi)下載:https://qr21.cn/BJ3hRM
產(chǎn)品書籍免費(fèi)下載地址:https://qr21.cn/BJ3hRM
嘎嘎
666
666677
理員和普通用戶被授予不同的權(quán)限,普通用戶只能去修改和查看個(gè)人信息,而不能創(chuàng)建創(chuàng)建用戶和凍結(jié)用戶,而管理員由于被授 予所有權(quán)限,所以可以做所有操作。