B端后臺(tái)“權(quán)限設(shè)計(jì)”的99種解法與反思
編輯導(dǎo)語(yǔ):合理的B端后臺(tái)權(quán)限設(shè)計(jì)體系將有助于協(xié)助用戶處理更多事務(wù),提升用戶的操作效率,也降低風(fēng)險(xiǎn)發(fā)生的可能性。那么,你了解權(quán)限設(shè)計(jì)中的每個(gè)模型嗎?本篇文章里,作者從自身經(jīng)驗(yàn)出發(fā),闡述了B端后臺(tái)權(quán)限設(shè)計(jì)的多種解法,一起來看一下。
“權(quán)限設(shè)計(jì)”是中后臺(tái)的底層設(shè)計(jì),它是系統(tǒng)設(shè)計(jì)中最為重要的一環(huán)。
優(yōu)秀的權(quán)限設(shè)計(jì)能夠有效提高系統(tǒng)的安全性、降低用戶誤操作,數(shù)據(jù)泄露的風(fēng)險(xiǎn);差勁的權(quán)限設(shè)計(jì),往往會(huì)導(dǎo)致系統(tǒng)流程不通,系統(tǒng)的穩(wěn)定性和安全性受到威脅。
而產(chǎn)品經(jīng)理在設(shè)計(jì)權(quán)限時(shí),往往會(huì)一頭霧水,不知從何下手。
其問題在于:一方面開源的權(quán)限產(chǎn)品較少,產(chǎn)品經(jīng)理無從體驗(yàn),借鑒。另一方面關(guān)于權(quán)限的文章良莠不齊,缺乏系統(tǒng)性的文章幫助了解權(quán)限構(gòu)成,產(chǎn)品們只能摸著石頭過河,犯一些認(rèn)知之外的錯(cuò)誤。
對(duì)此,筆者根據(jù)此前的產(chǎn)品實(shí)操經(jīng)驗(yàn),整合互聯(lián)網(wǎng)優(yōu)秀權(quán)限文章,輸出自身關(guān)于權(quán)限的淺薄認(rèn)知,望能起到些拋磚引玉的作用。
一、權(quán)限的定義是什么?
權(quán)限,百度百科將其定義為:“保證職責(zé)的有效履行,任職者必須具備的,對(duì)某事項(xiàng)能進(jìn)行決策的范圍和程度?!?/p>
但筆者理解為:“不同的對(duì)象在不同使用場(chǎng)景下,所需要的產(chǎn)品相應(yīng)的權(quán)力和責(zé)任的統(tǒng)一,其核心為權(quán)責(zé)明晰,權(quán)責(zé)分離,目的是建立分配資源的規(guī)則,以便用戶能夠通過這套規(guī)則,獲取他們應(yīng)獲得的資源?!?/p>
二、權(quán)限的維度有多少?
通常情況下,我們會(huì)將權(quán)限分成兩個(gè)維度,分別為功能權(quán)限和數(shù)據(jù)權(quán)限。功能權(quán)限是指用戶能夠做什么樣的操作,或者訪問哪些資源,使用哪些功能;數(shù)據(jù)權(quán)限是指哪些數(shù)據(jù)屬于你,或者屬于你可以操作的范圍。
從顆粒度維度來分,功能權(quán)限的顆粒度從粗到細(xì)一般分為“模塊級(jí)”>>“頁(yè)面級(jí)”>>“接口級(jí)”,由此引申出了常說的頁(yè)面權(quán)限、模塊權(quán)限、接口權(quán)限。
數(shù)據(jù)權(quán)限的顆粒度從粗到細(xì)一般分為“對(duì)象級(jí)”>>”字段級(jí)”,由此引申出對(duì)象級(jí)數(shù)據(jù)權(quán)限(具體到實(shí)際用戶)、字段級(jí)數(shù)據(jù)權(quán)限(具體到表單字段)。
從權(quán)限操作維度來說,權(quán)限操作可以分為授權(quán)和鑒權(quán)。
- 鑒權(quán)是指驗(yàn)證用戶是否擁有訪問系統(tǒng)的權(quán)利,一般是指針對(duì)具體人的行為,根據(jù)權(quán)限規(guī)則進(jìn)行合法性鑒別。在邏輯上,鑒權(quán)一般先于授權(quán)。
- 授權(quán)一般可理解為是分配給具體的權(quán)限給具體的人。它可分為功能授權(quán)和數(shù)據(jù)授權(quán)。
功能授權(quán)往往是單一維度的,一般會(huì)功能列表或者功能樹上進(jìn)行勾選,來確定用戶所對(duì)應(yīng)的可操作資源。
數(shù)據(jù)授權(quán)和功能授權(quán)不同,數(shù)據(jù)是多維的,是抽象的。因此,在做數(shù)據(jù)授權(quán)之前,往往需要考慮對(duì)數(shù)據(jù)維度進(jìn)行拆分,而數(shù)據(jù)是抽象的,我們不能具象地看待單個(gè)用戶的某一條數(shù)據(jù),那沒有任何意義,而是要內(nèi)置抽象的規(guī)則,通過抽象的規(guī)則,去尋找數(shù)據(jù)背后的聯(lián)系。
三、權(quán)限設(shè)計(jì)的模型有哪些?
1. 自主訪問控制(DAC:Discretionary Access Control)
自主訪問控制是指由用戶有權(quán)對(duì)自身所創(chuàng)建的訪問對(duì)象(文件、數(shù)據(jù)表等)進(jìn)行訪問,擁有對(duì)象權(quán)限的用戶。
可將對(duì)這些對(duì)象的訪問權(quán)授予其他用戶和從授予權(quán)限的用戶收回其訪問權(quán)限,此類權(quán)限模型往往應(yīng)用于文檔系統(tǒng)的權(quán)限設(shè)計(jì),例如微軟的NTFS文件系統(tǒng)。
DAC不僅能夠分配權(quán)限,還能夠?qū)?quán)限進(jìn)行累加,繼承,但是其最大的缺點(diǎn)在于,權(quán)限過于分散,不方便管理,例如,無法簡(jiǎn)單地將一組文件設(shè)置一個(gè)統(tǒng)一的權(quán)限開發(fā)給制定的一群用戶。
2. 強(qiáng)制訪問控制(MAC:Mandatory Access Control)
MAC模型往往用于信息敏感行業(yè),該模型將系統(tǒng)中的信息分密級(jí)和類進(jìn)行管理,以保證每個(gè)用戶只能訪問到那些被標(biāo)明可以由他訪問的信息的一種訪問約束機(jī)制。
通俗地來說,在強(qiáng)制訪問控制下,用戶(或其他主體)與文件(或其他客體)都被標(biāo)記了固定的安全屬性(如安全級(jí)、訪問權(quán)限等),在每次訪問發(fā)生時(shí),系統(tǒng)檢測(cè)安全屬性以便確定一個(gè)用戶是否有權(quán)訪問該文件。例如多級(jí)安全(MultiLevel Secure, MLS)就是一種強(qiáng)制訪問控制策略。
3. 訪問控制列表(ACL:Access Control List)
ACL(Access Control List)主要包含三個(gè)關(guān)鍵要素用戶(User)、資源(Resource)和操作(Operate)。
ACL將每一項(xiàng)資源都分配一個(gè)列表,當(dāng)用戶需要訪問資源時(shí),都會(huì)先去請(qǐng)求列表是否有當(dāng)前用戶的訪問權(quán)限,從而確定當(dāng)前用戶可否執(zhí)行相應(yīng)操作。
其優(yōu)點(diǎn)是,ACL及其簡(jiǎn)單,不需要任何基礎(chǔ)設(shè)備就可完成訪問控制,但是由于其表單數(shù)量過多,導(dǎo)致若系統(tǒng)內(nèi)部有大量資源,管理訪問控制列表就成為了繁瑣的工作。
4. 基于角色的訪問控制制(RBAC:Role-Based Access Control)
RBAC模型是在實(shí)際業(yè)務(wù)中使用最多的模型,RBAC模型主要由3個(gè)基礎(chǔ)模塊組成,分別為用戶、角色、權(quán)限。系統(tǒng)通過編輯用戶與角色、角色與權(quán)限的映射關(guān)系,解耦用戶與權(quán)限的關(guān)系,大幅度降低數(shù)據(jù)冗余,進(jìn)而降低了系統(tǒng)的復(fù)雜度,提高了系統(tǒng)的靈活性。
RBAC模型它只是一個(gè)大類,它可以細(xì)致地劃分為:RBAC0、RBAC1、RBAC2、RBAC3。
1)基本模型:RBAC0
RBAC0是RBAC的核心,它定義了能構(gòu)成RBAC控制系統(tǒng)的最小元素的集合(角色)。在此模型中,它指明了角色、用戶、訪問權(quán)限和會(huì)話之間的關(guān)系。其流程為,通過用戶關(guān)聯(lián)角色,定義權(quán)限集(角色)的方法間接的賦予用戶權(quán)限,進(jìn)而達(dá)到用戶和權(quán)限解耦的目的。
在RABC中,用戶與角色的關(guān)系可以分為為“N:1(多對(duì)一)的用戶角色關(guān)系”和”N:N(多對(duì)多)的用戶角色關(guān)系“。
舉個(gè)N:1的用戶角色關(guān)系的例子,李三、李四(用戶)都是A部門(用戶組)的人,崗位都為產(chǎn)品運(yùn)營(yíng)(角色),他們都需要文章審核、文章發(fā)布功能(權(quán)限)。因此,只需要對(duì)產(chǎn)品運(yùn)營(yíng)(角色)進(jìn)行分配文章審核、文章發(fā)布(權(quán)限),將產(chǎn)品運(yùn)營(yíng)(角色)分配給李三、李四即可。
N:N(多對(duì)多)的用戶角色關(guān)系中,若一個(gè)用戶被分配了多個(gè)角色,那么該用戶的權(quán)限為所分配角色的并集。
再舉個(gè)例子,李五為B部門的產(chǎn)品經(jīng)理,權(quán)限為文章模板設(shè)置。但是因?yàn)槟炒握{(diào)研,他需要A部門的文章審核、發(fā)布權(quán)限。當(dāng)分配給他A部門產(chǎn)品運(yùn)營(yíng)角色后,此時(shí),他的權(quán)限變成了文章審核、發(fā)布權(quán)限、文章模板設(shè)置。
但在實(shí)際業(yè)務(wù)中,對(duì)于用戶的理解并非如上文中所寫的那么淺薄。實(shí)際上,對(duì)于用戶的定義多種多樣,就筆者自身對(duì)用戶的理解而言:“用戶本質(zhì)上為一個(gè)個(gè)需求的集合體“。
從這個(gè)角度來講,在使用場(chǎng)景和需求相對(duì)一致的情況下,可以將這部分用戶看作一個(gè)需求集合體一致的群組,進(jìn)而形成一個(gè)用戶組(即為用戶的集合體)。
拿之前的例子來說,若A部門為產(chǎn)品運(yùn)營(yíng)部,那么我們無需對(duì)A部門內(nèi)部的人去分配角色。而是以A部門為對(duì)象去分配角色。
同時(shí),現(xiàn)實(shí)中同樣也存在以下使用場(chǎng)景,需要對(duì)用戶分配居多的權(quán)限,若一個(gè)個(gè)分配將特別繁瑣,因而可以選擇將相對(duì)固定的權(quán)限打包成組來賦予給用戶。
2)角色分層模型:RBAC1
RBAC1在RBAC0的基礎(chǔ)上,引入角色間的繼承關(guān)系,即角色上有了上下級(jí)的區(qū)別。角色間的繼承關(guān)系可分為一般繼承關(guān)系和受限繼承關(guān)系。
一般繼承關(guān)系僅要求角色繼承關(guān)系是一個(gè)絕對(duì)偏序關(guān)系(有向無環(huán)圖),可進(jìn)行多繼承。而受限繼承關(guān)系則進(jìn)一步要求角色繼承關(guān)系是一個(gè)樹結(jié)構(gòu)(二叉樹)間的單繼承。
一般繼承的RBAC和受限繼承的RBAC兩者的區(qū)別在于:前者是圖,可多繼承;而后者可以有多個(gè)父節(jié)點(diǎn)但只能有一個(gè)子節(jié)點(diǎn),是一個(gè)反向樹結(jié)構(gòu),只能單繼承。
RBAC1模型往往使用于角色之間層級(jí)明晰的產(chǎn)品中,一般會(huì)和組織架構(gòu)關(guān)聯(lián)起來。例如,李三為產(chǎn)品運(yùn)營(yíng),其上級(jí)李四為產(chǎn)品經(jīng)理。則李四會(huì)將其部分權(quán)限授權(quán)給李三,也可認(rèn)定為李三繼承了李四的部分權(quán)限,即子集繼承了父級(jí)部分權(quán)限。
3)角色限制模型:RBAC2
RBAC2模型中添加了責(zé)任分離關(guān)系。RBAC2的約束規(guī)定了權(quán)限被賦予角色時(shí),或角色被賦予用戶時(shí),以及當(dāng)用戶在某一時(shí)刻激活一個(gè)角色時(shí)所應(yīng)遵循的強(qiáng)制性規(guī)則。
責(zé)任分離包括靜態(tài)責(zé)任分離和動(dòng)態(tài)責(zé)任分離。約束與用戶——角色——權(quán)限關(guān)系一起決定了RBAC2模型中用戶的訪問許可,此約束有多種,主要包括:
靜態(tài)限制(靜態(tài)責(zé)任分離)同一用戶只能分配到一組互斥角色集合中至多一個(gè)角色,支持責(zé)任分離的原則。例如:同一個(gè)人不能既是“運(yùn)動(dòng)員”又是“裁判員”,即當(dāng)用戶分配給受眾運(yùn)動(dòng)員的角色后,權(quán)限頁(yè)面無法給于其分配裁判員的權(quán)限。
動(dòng)態(tài)限制:運(yùn)行時(shí)互斥:例如,允許一個(gè)用戶具有兩個(gè)角色的成員資格,但在運(yùn)行中不可同時(shí)激活這兩個(gè)角色。當(dāng)一個(gè)人被授予了運(yùn)動(dòng)員和裁判員角色,在一次比賽中,他只能選擇以一個(gè)身份進(jìn)行,不能以兩種身份同時(shí)進(jìn)行。
基數(shù)約束:一個(gè)角色被分配的用戶數(shù)量受限;一個(gè)用戶可擁有的角色數(shù)目受限;同樣一個(gè)角色對(duì)應(yīng)的訪問權(quán)限數(shù)目也應(yīng)受限,以控制高級(jí)權(quán)限。
先決條件角色:可以分配角色給用戶僅當(dāng)該用戶已經(jīng)是另一角色的成員;對(duì)應(yīng)的可以分配訪問權(quán)限給角色,僅當(dāng)該角色已經(jīng)擁有另一種訪問權(quán)限。要想獲得較高的權(quán)限,要首先擁有低一級(jí)的權(quán)限。就像我們生活中,國(guó)家主席是從副主席中選舉的一樣。
4)整合統(tǒng)一模型:RBAC3
RBAC3包含了RBAC1和RBAC2,既提供了角色間的繼承關(guān)系,又提供了責(zé)任分離關(guān)系。
5. 基于屬性的權(quán)限驗(yàn)證(ABAC:Attribute-Based Access Control)
ABAC被認(rèn)為是權(quán)限控制的未來,由于其邏輯比較復(fù)雜,筆者并未吃透,所以只簡(jiǎn)單地介紹一下。
ABAC可分為訪問控制策略、環(huán)境條件、主體、客體、主體屬性、客體屬性。它通過將主體屬性、客體屬性和環(huán)境條件結(jié)合起來,按照它們與訪問控制策略的匹配情況來確定訪問(即對(duì)系統(tǒng)客體的操作)。
簡(jiǎn)單而言就是將主體和客體的屬性用策略相關(guān)聯(lián),通過讀取策略來確定主體可對(duì)客體進(jìn)行哪些操作。
四、基于RBAC模型設(shè)計(jì)權(quán)限時(shí)應(yīng)注意什么?
1. 熟悉業(yè)務(wù)流程,盤點(diǎn)角色
設(shè)計(jì)初期,應(yīng)該重新梳理系統(tǒng)中不同模塊的業(yè)務(wù)流程,通過業(yè)務(wù)流程圖,來盤點(diǎn)各個(gè)節(jié)點(diǎn)的角色,在這一環(huán)節(jié)中,需要對(duì)角色進(jìn)行窮舉,保證系統(tǒng)在運(yùn)行過程中達(dá)到閉環(huán)。一般情況下:
- 角色通過崗位去劃分,例如在禪道中,通過不同的崗位來劃分不同的角色。
- 角色通過任務(wù)流劃分,根據(jù)業(yè)務(wù)流程中的不同節(jié)點(diǎn)功能,可將定義角色,例如,在某審批系統(tǒng),可將角色劃分為錄入人員、審核人員。
2. 盤點(diǎn)權(quán)限,使用正確的描述方式
將系統(tǒng)中的所有功能模塊進(jìn)行歸納整理,并根據(jù)自身系統(tǒng)所需要的顆粒度,來選擇權(quán)限的顆粒度。
同時(shí),在PRD中傳達(dá)一個(gè)系統(tǒng)的權(quán)限設(shè)計(jì)規(guī)則時(shí),不應(yīng)該采用“當(dāng)…時(shí),就….“的語(yǔ)句去表達(dá)規(guī)則,而是要將角色和單元繪制成網(wǎng)格,每一個(gè)交叉節(jié)點(diǎn)為描述該角色與權(quán)限的數(shù)據(jù)關(guān)系和限制。
特別要注意的是,在設(shè)計(jì)數(shù)據(jù)權(quán)限時(shí),其查看權(quán)限往往應(yīng)設(shè)計(jì)在“增、刪、改、查”之前。
3. 做好無頁(yè)面權(quán)限的提示
在正常情況下,當(dāng)用戶無對(duì)應(yīng)權(quán)限時(shí),該頁(yè)面會(huì)直接隱藏,但也不排除用戶可以獲取到權(quán)限外的URL地址,因?yàn)楫?dāng)用戶訪問到?jīng)]有權(quán)限的頁(yè)面時(shí),需提示該用戶無對(duì)應(yīng)權(quán)限。
4. 創(chuàng)建默認(rèn)角色
默認(rèn)角色一般為系統(tǒng)中自帶的角色,其往往包括超級(jí)管理員,管理員、業(yè)務(wù)員等等。
一般情況下,超級(jí)管理員為隱形角色,為領(lǐng)導(dǎo)高層掌握,擁有整個(gè)系統(tǒng)的所有權(quán)限,管理員繼承超級(jí)管理員所分配的權(quán)限,若管理員唯一的情況下,自身不可編輯,不可刪除,防止用戶刪除管理員角色,導(dǎo)致系統(tǒng)無法正常運(yùn)行。其余角色為管理員創(chuàng)建,可編輯,可刪除。
5. 對(duì)系統(tǒng)的長(zhǎng)期規(guī)劃需明確
在搭建權(quán)限系統(tǒng)時(shí),應(yīng)該詳細(xì)地了解系統(tǒng)的業(yè)務(wù)范圍和長(zhǎng)期規(guī)劃,梳理角色,并盡可能多地獲取用戶信息。
例如,在數(shù)據(jù)權(quán)限配置過程種,我們通過數(shù)據(jù)打標(biāo)來劃分?jǐn)?shù)據(jù)權(quán)限,但是隨著數(shù)據(jù)的標(biāo)識(shí)增加,權(quán)限判斷條件增多,就會(huì)出現(xiàn)大量用戶信息需要判斷的問題。
6. 用戶的長(zhǎng)期維護(hù)需及時(shí)處理
當(dāng)系統(tǒng)長(zhǎng)時(shí)間運(yùn)轉(zhuǎn)時(shí),在權(quán)限上,可能會(huì)因?yàn)橛脩綦x職,權(quán)限系統(tǒng)未及時(shí)更新,而導(dǎo)致內(nèi)部數(shù)據(jù)泄露的問題發(fā)生。針對(duì)這種情況,產(chǎn)品可采用權(quán)限系統(tǒng)與OA系統(tǒng)互通或者系統(tǒng)設(shè)置數(shù)據(jù)自動(dòng)清洗的規(guī)則來解決。
7. 公司內(nèi)部的權(quán)限規(guī)則需統(tǒng)一
當(dāng)一個(gè)系統(tǒng)非常龐大時(shí),由多名產(chǎn)品經(jīng)理負(fù)責(zé)時(shí),可能會(huì)出現(xiàn)由于沒有制定統(tǒng)一的權(quán)限規(guī)范,導(dǎo)致在提需求時(shí),忘記說明而導(dǎo)致新功能沒有去實(shí)現(xiàn)權(quán)限控制。因此,在一個(gè)相對(duì)較大的項(xiàng)目中,產(chǎn)品經(jīng)理們可以針對(duì)權(quán)限、UI做一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。
互聯(lián)網(wǎng)上優(yōu)秀的權(quán)限文章合集
- 【網(wǎng)易UEDC】角色權(quán)限設(shè)計(jì)的100種解法
- 【騰訊CDC】系統(tǒng)解讀:權(quán)限設(shè)計(jì)指南
- 【王賽】中后臺(tái)學(xué)習(xí)筆記-數(shù)據(jù)權(quán)限
- 【學(xué)習(xí)文檔】RBAC總結(jié)
- 【Enlink_Young】基于熟悉的訪問控制(ABAC)定義與思考
本文由 @lee的自我復(fù)盤 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
寫的太好了!
到底是rabc還是rbac,文章里一會(huì)rabc一會(huì)rbac,搞毛?
樂哥 是你吧,哈哈
少了一個(gè)pbac 基于策略的權(quán)限驗(yàn)證