系統(tǒng)權(quán)限設(shè)計(jì)思路方法總結(jié)

? ? 幾乎所有的管理后臺(tái)都會(huì)涉及到權(quán)限的設(shè)計(jì),權(quán)限控制是管理后臺(tái)的重要功能,可以有效的提高系統(tǒng)的安全性,減少誤操作、數(shù)據(jù)泄漏等風(fēng)險(xiǎn)的發(fā)生。但是,很多產(chǎn)品經(jīng)理會(huì)對(duì)權(quán)限功能有一點(diǎn)害怕的心理,一方面是由于能參考的實(shí)例較少,權(quán)限管理算是一個(gè)“系統(tǒng)級(jí)”的基礎(chǔ)功能,一般系統(tǒng)中只有管理員可以操作,不像其他功能可以通過(guò)去其他系統(tǒng)中試用體驗(yàn),另一方面,對(duì)于權(quán)限功能普通用戶無(wú)法操作使用,所以存在感較低,做好了也不會(huì)出彩,可沒(méi)做好就會(huì)導(dǎo)致整個(gè)流程不通、產(chǎn)品崩潰。

一 RBAC模型

? ? 目前,接受度較高的功能權(quán)限模型是RBAC(Role-Based Access Control)模型。在RBAC中,權(quán)限與角色相關(guān)聯(lián),用戶通過(guò)成為適當(dāng)角色的成員而得到這些角色的權(quán)限。這就極大地簡(jiǎn)化了權(quán)限的管理。在一個(gè)組織中,角色是為了完成各種工作而創(chuàng)造,用戶則依據(jù)它的責(zé)任和資格來(lái)被指派相應(yīng)的角色,用戶可以很容易地從一個(gè)角色被指派到另一個(gè)角色。角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限,而權(quán)限也可根據(jù)需要而從某角色中回收。

1.角色的作用

如果沒(méi)有角色的概念,直接用戶對(duì)應(yīng)權(quán)限,雖然會(huì)更加靈活,但是后臺(tái)的數(shù)據(jù)表設(shè)計(jì)會(huì)變得復(fù)雜,操作成本也會(huì)很高,同時(shí)容錯(cuò)能力也會(huì)變得很差。

而引入“角色”概念后,用戶與角色可為多對(duì)一或多對(duì)多的關(guān)系,當(dāng)一個(gè)用戶的角色為多對(duì)多時(shí),當(dāng)前用戶的權(quán)限是多個(gè)角色的并集。此時(shí)只需要為角色賦予權(quán)限,能夠大大減輕管理負(fù)擔(dān),同時(shí)將用戶與權(quán)限解耦,提供更大的靈活性,同時(shí)整個(gè)設(shè)計(jì)的容錯(cuò)能力也提高了很多。

2.引入用戶組

? 一些大型的平臺(tái)上,如果用戶數(shù)量較大,新增角色時(shí),需要為大量用戶分配新的角色,工作量巨大,此時(shí)可以引入用戶組的概念,將這些用戶拉到同一個(gè)用戶組中,然后對(duì)整個(gè)用戶組進(jìn)行角色的指定,這就大大減少了角色分配的工作量。

同理如果權(quán)限較多時(shí)也會(huì)存在一樣的問(wèn)題,對(duì)角色進(jìn)行權(quán)限設(shè)置時(shí)也需要大量的操作,此時(shí)可以考慮引入權(quán)限組的概念,將關(guān)聯(lián)性較強(qiáng)的權(quán)限大包成組賦予角色,從而減少賦值時(shí)的工作量,現(xiàn)實(shí)中權(quán)限組的使用相對(duì)較少,因?yàn)橄到y(tǒng)中的權(quán)限一般來(lái)講是有限的。需要注意的是即使有用戶組或權(quán)限組的存在,也可以允許用戶或權(quán)限與角色直接關(guān)聯(lián),這個(gè)可以視具體業(yè)務(wù)情況而定。

下圖所示為mac系統(tǒng)中運(yùn)行添加用戶組,并以用戶組為單位配置權(quán)限。

3. 角色繼承的RBAC模型

在一個(gè)業(yè)務(wù)場(chǎng)景中,如果角色需區(qū)分:設(shè)計(jì)主管、設(shè)計(jì)組長(zhǎng)、設(shè)計(jì)成員,并且管理方式為向下兼容時(shí),則需使用角色繼承的RBAC模型。上層角色繼承下層角色的全部權(quán)限,且可額外賦予權(quán)限。

此時(shí)除了對(duì)角色進(jìn)行定義,還需要管理角色間的關(guān)系,通過(guò)關(guān)系來(lái)體現(xiàn)角色的層級(jí)關(guān)系,從而達(dá)到繼承權(quán)限的效果。角色的繼承關(guān)系主要有兩種:樹(shù)形圖和有向無(wú)環(huán)圖。

繼承關(guān)系常常來(lái)源于公司團(tuán)隊(duì)的組織結(jié)構(gòu),此時(shí)常將角色與組織結(jié)構(gòu)進(jìn)行關(guān)聯(lián)達(dá)到繼承角色模型的效果。如下圖所示的趙同學(xué),其角色是“三級(jí)團(tuán)隊(duì)負(fù)責(zé)人”,與其并列的小組中有多個(gè)“三級(jí)團(tuán)隊(duì)負(fù)責(zé)人”的角色,但依附于左側(cè)的組織結(jié)構(gòu)樹(shù),各級(jí)負(fù)責(zé)人僅有查看和操作自己下屬子節(jié)點(diǎn)的權(quán)限。

4. 限制的RBAC模型

在一個(gè)產(chǎn)品或系統(tǒng)中,部分角色可能是需要隔離的、不允許被同時(shí)賦予一個(gè)人的。跟大家熟知的“不能既是‘運(yùn)動(dòng)員’又是‘裁判員’ ”一個(gè)道理。

因此,對(duì)于眾多角色中的一組,只能是單選的關(guān)系,但多組角色之間可以共同存在。如下圖中,一個(gè)用戶可以既為設(shè)計(jì)師又為管理員,但在設(shè)計(jì)師角色組中僅能被賦予一個(gè)角色,在管理員角色組中也僅能被賦予一個(gè)角色。

此外,限制還有可能是數(shù)量上的,比如一個(gè)產(chǎn)品組中必須有且只有一個(gè)管理員,不允許刪除或再分配管理員角色,僅允許將負(fù)責(zé)人角色變更。

限制的模型不僅僅對(duì)分配過(guò)程產(chǎn)生影響,有時(shí)即使擁有了多種角色,因?yàn)椴煌慕巧珜?duì)同一個(gè)功能的使用方式或數(shù)據(jù)會(huì)產(chǎn)生沖突,所以使用時(shí)也需要進(jìn)行限制。如下圖所示為同一時(shí)間僅允許以一個(gè)身份登錄。

根據(jù)不同的業(yè)務(wù)需求,限制的形式很多。需要注意的是不能僅依賴后端限制,而是要在前端展示清晰的規(guī)則和恰當(dāng)?shù)南拗疲苊庥脩舫鲥e(cuò)和沮喪。

三、權(quán)限的拆分與設(shè)計(jì)

通過(guò)RBAC模型已經(jīng)能夠很好的搭建起用戶、角色與權(quán)限之間的關(guān)系了。但具體是什么樣的關(guān)系,以及“權(quán)限”這個(gè)抽象的概念具體如何規(guī)劃?

這些都需要分析清楚才能進(jìn)一步設(shè)計(jì)出完善的權(quán)限系統(tǒng)。

首先需要知道,一般產(chǎn)品的權(quán)限由頁(yè)面、操作和數(shù)據(jù)構(gòu)成。頁(yè)面與操作相互關(guān)聯(lián),必須擁有頁(yè)面權(quán)限,才能分配該頁(yè)面下對(duì)應(yīng)的操作權(quán)限。數(shù)據(jù)可被增刪改查。

整體關(guān)系如下圖所示:

因此,在設(shè)計(jì)之初我們就需要考慮到未來(lái)可能區(qū)分角色的地方,盡量解耦、模塊化。對(duì)于技術(shù)來(lái)說(shuō),每一個(gè)頁(yè)面模塊、每一個(gè)操作都最好使用獨(dú)立的接口。對(duì)于設(shè)計(jì)來(lái)說(shuō),需要保障所有角色因?yàn)闄?quán)限而屏蔽掉部分操作和數(shù)據(jù)后,頁(yè)面和流程仍能體驗(yàn)流暢。

保證初期設(shè)計(jì)支持后,配置權(quán)限時(shí),還需要注意以下幾點(diǎn):

(1)確定是否支持前端配置

如果角色和權(quán)限相對(duì)固定,則一般將角色與權(quán)限的關(guān)系可以寫(xiě)在后臺(tái),改動(dòng)時(shí)需要后端變更且重新上線。這種情況適用于公司內(nèi)部系統(tǒng)等只有一個(gè)使用主體的系統(tǒng)。

如果需要自定義角色或者每個(gè)角色在不同使用者的場(chǎng)景下有不同的權(quán)限,則需要將角色的定義、角色與權(quán)限之間的配置體現(xiàn)在“前端用戶配置頁(yè)面”。這種情況適用于有頻繁變動(dòng)的自定義角色權(quán)限,和有租戶體系的系統(tǒng)。

(2)以基本單元拆分,以業(yè)務(wù)邏輯配置

一般可將每個(gè)對(duì)象的“增、刪、改、查”各自作為一個(gè)基本的權(quán)限單元。打個(gè)比方,在“人員管理”中,查看人員列表、添加人員、刪除人員、編輯人員信息最好拆分為4個(gè)權(quán)限單元。在技術(shù)和設(shè)計(jì)上,我們希望能盡量做到解耦和模塊化。

但是在業(yè)務(wù)層面有些操作卻是一體的。這些不能拆開(kāi)的權(quán)限在“前端用戶配置頁(yè)面”中建議打包成一個(gè)整體提供配置。例如:如果我們確定在系統(tǒng)的現(xiàn)有和未來(lái)業(yè)務(wù)中,僅分為普通成員有“人員管理”的查看權(quán)限,管理員有操作權(quán)限,則可將“增、刪、改”三個(gè)基本權(quán)限單位合并為“操作”權(quán)限進(jìn)行配置。

(3)頁(yè)面權(quán)限優(yōu)先于操作和數(shù)據(jù)權(quán)限

必須配置了頁(yè)面模塊權(quán)限后,才能配置當(dāng)前頁(yè)面模塊下具體的操作權(quán)限,以及頁(yè)面模塊的數(shù)據(jù)展示權(quán)限。

(4)查看權(quán)限優(yōu)先于增刪改權(quán)限

正常情況下,一定要先能查看某個(gè)模塊或操作,其它的增刪改操作才有意義。因此在設(shè)計(jì)時(shí),應(yīng)在獲取查看權(quán)限前限制其它權(quán)限的配置,或者配置其它權(quán)限時(shí)默認(rèn)賦予查看權(quán)限。

(5)角色與權(quán)限的多種關(guān)系

角色與權(quán)限的關(guān)系不僅是單純“是/否關(guān)系”,還包括以某種限制進(jìn)行操作,和以某種程度訪問(wèn)數(shù)據(jù)。

例如在“人員管理”中:

數(shù)據(jù)范圍:用戶擁有查看人員列表的權(quán)限,但僅能查看自己所在的團(tuán)隊(duì);數(shù)據(jù)邊界限制(上限等):添加人員時(shí)不能超過(guò)20個(gè)等。數(shù)據(jù)字段:HR能查看人員列表中包括職級(jí)、薪資等字段,其它角色僅能查看姓名郵箱等字段;

(6)角色與權(quán)限的設(shè)計(jì)表達(dá)

在傳達(dá)一個(gè)系統(tǒng)的權(quán)限設(shè)計(jì)規(guī)則時(shí),設(shè)計(jì)師常常習(xí)慣用主觀最直接的方式表達(dá)想法,如用“當(dāng)……時(shí),就……”的句式來(lái)表達(dá)。但一個(gè)平臺(tái)中涉及的權(quán)限規(guī)則是非常多的,當(dāng)通篇以這樣的形式描述時(shí),表達(dá)對(duì)象將很難理解。

正確的描述方式:更清晰的是基于開(kāi)發(fā)的語(yǔ)言,和技術(shù)模型的結(jié)果進(jìn)行表達(dá)。將各角色與權(quán)限單元繪制成網(wǎng)格,每個(gè)交叉點(diǎn)網(wǎng)格中描述該角色與權(quán)限的數(shù)據(jù)關(guān)系和限制。

如下圖所示:

四、需要注意的Tips

1. 隱形的admin

在可自定義角色和權(quán)限的系統(tǒng)中,一般需要預(yù)留一個(gè)admin角色來(lái)進(jìn)行系統(tǒng)的初始配置,用于添加首批的業(yè)務(wù)人員和配置基本的角色。

有的系統(tǒng)中允許存在上帝視角的admin角色,則其可以作為“超級(jí)管理員”顯示在角色配置的列表中。有的系統(tǒng)中不允許這種角色存在,則可將這種角色設(shè)置為隱形的狀態(tài),僅賦予維護(hù)系統(tǒng)的工作人員。

2. 初始權(quán)限的賦予

對(duì)于允許用戶自行加入的系統(tǒng),需要設(shè)定一至多個(gè)默認(rèn)的角色,有時(shí)可以是僅有最基礎(chǔ)權(quán)限的“游客”角色。

初始權(quán)限還可以與用戶既有的某些數(shù)據(jù)字段進(jìn)行關(guān)聯(lián),如添加用戶時(shí)獲取到用戶的崗位為“設(shè)計(jì)師”,則直接賦予“設(shè)計(jì)師”角色的權(quán)限。

3. 人員管理中對(duì)自己的處理

在人員管理中,管理員角色處理自己時(shí)需要額外注意。因?yàn)槿绻薷幕騽h除了自己角色后,可能導(dǎo)致系統(tǒng)沒(méi)有管理角色,從而無(wú)法添加其他成員和正常運(yùn)行。設(shè)計(jì)時(shí)可添加判斷,當(dāng)自己為唯一管理角色時(shí),禁止編輯和刪除。

4. 無(wú)頁(yè)面權(quán)限的提示

雖然可以通過(guò)頁(yè)面權(quán)限限制直接隱藏當(dāng)前用戶沒(méi)有權(quán)限的頁(yè)面,但不能排除用戶獲取到權(quán)限外的url地址。當(dāng)用戶意外訪問(wèn)到?jīng)]有權(quán)限的頁(yè)面時(shí)務(wù)必提供“無(wú)權(quán)限”的提示,避免用戶認(rèn)為系統(tǒng)bug。

總結(jié)一下,整個(gè)權(quán)限系統(tǒng)設(shè)計(jì)就是定義各個(gè)節(jié)點(diǎn)和節(jié)點(diǎn)間關(guān)系的過(guò)程。

節(jié)點(diǎn)包括:

用戶;用戶組;角色;角色組;權(quán)限(頁(yè)面、操作、數(shù)據(jù));權(quán)限組(頁(yè)面、操作、數(shù)據(jù));

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容