一文詳解To B權(quán)限設(shè)計(jì)
這是”一文”系列的第二篇。本篇主要介紹基于RBAC模型權(quán)限設(shè)計(jì)的方法。
01 什么是RBAC模型權(quán)限?
我們先看下邊一個(gè)小場景:
小明同學(xué)想晚上10點(diǎn)后進(jìn)入圖書館學(xué)習(xí),就在晚上10點(diǎn)準(zhǔn)備進(jìn)入圖書館時(shí)被保安王大叔給攔住了,理由是只有圖書館管理員10點(diǎn)以后才能進(jìn)入圖書館。
1. 怎么樣才能讓小明同學(xué)在10點(diǎn)以后進(jìn)入圖書館學(xué)習(xí)?
“讓小明同學(xué)偷偷溜進(jìn)去?” “給保安王大叔給好處?”
“還是讓小明同學(xué)去“某組織”申請成為“圖書館管理員”?”
看來還是申請成為“圖書館管理員”比較靠譜,雖然需要寫申請書,找老師簽字等走一系列的流程,雖然麻煩,但是這是晚上10點(diǎn)以后進(jìn)入圖書館的正規(guī)途徑。
2. 進(jìn)圖書館小場景和RBAC模型有什么聯(lián)系?
首先我們先看下百度百科的介紹
“RBAC(Role-Based?Access?Control):基于角色的訪問控制(RBAC)是實(shí)施面向企業(yè)安全策略的一種有效的訪問控制方式。”
“其基本思想是,對系統(tǒng)操作的各種權(quán)限不是直接授予具體的用戶,而是在用戶集合與權(quán)限集合之間建立一個(gè)角色集合。每一種角色對應(yīng)一組相應(yīng)的權(quán)限。一旦用戶被分配了適當(dāng)?shù)慕巧?,該用戶就擁有此角色的所有操作?quán)限。”
看了百度百科介紹是不是感覺一臉懵?我們結(jié)合上邊的小場景去看:
- 角色1:圖書館管理員
- 角色2:保安? ? ??
- 用戶:小明同學(xué)
- 權(quán)限:晚上10點(diǎn)以后進(jìn)入圖書館的權(quán)限
- 系統(tǒng):圖書館
“圖書館”將晚上10點(diǎn)以后進(jìn)入圖書館的權(quán)限授權(quán)給“圖書館管理員”,只有“圖書館管理員”角色的權(quán)限才可以晚上10點(diǎn)進(jìn)入圖書館。小明同學(xué)想晚上10點(diǎn)后進(jìn)入圖書館,就需要成為“圖書館管理員”這個(gè)角色,直接將權(quán)限賦給小明是不可行的。如下圖:
通過小場景,我們簡單的理解了RBAC的基本概念,用“角色”將“用戶”與“權(quán)限”進(jìn)行分割,實(shí)現(xiàn)“用戶”與“權(quán)限”的解耦。只要是小明同學(xué)屬于圖書館管理員角色,他就可以進(jìn)入晚上10點(diǎn)后圖書館,其他同學(xué)如果也申請了圖書館管理角色,同理也是可以在晚上10點(diǎn)以后進(jìn)入圖書館的。
有人問會有疑問,為什么要設(shè)置“角色”,直接把權(quán)限賦予給“用戶”就行啦,不需要這么麻煩呀。咱們接著往下看。
3. RBAC模型的特點(diǎn)
提升管理效率,降低授權(quán)復(fù)雜性
如果圖書館出了新規(guī)定,晚上10點(diǎn)禁止任何人進(jìn)入圖書館。圖書館只需要將“圖書館管理員”角色下晚10點(diǎn)后進(jìn)入圖書館權(quán)限關(guān)閉即可(如下圖)。反之,試想如果沒有“圖書館管理員”角色,直接將晚上10點(diǎn)以后進(jìn)入圖書館權(quán)限賦給小明和其他同學(xué)。要取消權(quán)限就要對每個(gè)有權(quán)限的同學(xué)進(jìn)行取消權(quán)限,大大增加了工作量。
適用企業(yè)管理變化
圖書館又發(fā)出新規(guī)定“圖書館出了新規(guī)定,晚上10點(diǎn)禁止任何人進(jìn)入圖書館不合理,應(yīng)該讓“保安”可以在晚上10點(diǎn)進(jìn)入圖書館進(jìn)行巡邏?!蓖ㄟ^RBAC模型方式,直接將“保安”角色賦予“晚上10點(diǎn)以后進(jìn)入圖書館”的權(quán)限就可以了。
02 RBAC模型權(quán)限設(shè)計(jì)方法
模型1:RBAC0
RBAC0是RBAC的基礎(chǔ),RBAC1,RBAC2,RBAC3模型都是從RBAC0模型拓展而成。
RBAC0模型中用戶,角色,權(quán)限都是多對多關(guān)系。例如:實(shí)際中企業(yè)可能由于各種原因會出現(xiàn)一人承擔(dān)多個(gè)角色。比如擔(dān)任人力崗位同時(shí),也會承擔(dān)行政的工作。
模型2:RBAC1
RBAC1在RBAC0的基礎(chǔ)上,加入角色繼承的概念。將角色下分成各個(gè)等級的小角色(如圖),子級權(quán)限繼承父級。如下圖,根據(jù)子級等級不同來分配更細(xì)粒度的權(quán)限。
例如:公司的財(cái)務(wù)總監(jiān)可以看到整個(gè)公司所有部門的財(cái)務(wù)報(bào)表數(shù)據(jù),而銷售部財(cái)務(wù)經(jīng)理只能看到銷售部財(cái)務(wù)報(bào)表數(shù)據(jù),在銷售部財(cái)務(wù)經(jīng)理下可能還會設(shè)立其他崗位,比如財(cái)務(wù)專員,財(cái)務(wù)專員可能只有查看銷售部具體某個(gè)報(bào)表的權(quán)限。
模型3:RBAC2
RBAC2是對RBAC0在角色,權(quán)限上增加了限制條件,例如: 公司規(guī)定有人被賦予了財(cái)務(wù)角色,就不能再賦予他審計(jì)角色。這樣可以在一定程度上防止在年總審計(jì)時(shí)候,審計(jì)人與被審計(jì)人是同一個(gè)人。這就是角色互斥。
用戶擁有的角色數(shù),角色可以被賦予給多少用戶數(shù),角色擁有的權(quán)限數(shù)都是可以被限制的,這就是基數(shù)限制。
還有先決條件限制,比如想擁有高級產(chǎn)品經(jīng)理,就必須先擁有產(chǎn)品經(jīng)理角色。
最后還有一種是動態(tài)的限制用戶及其擁有的角色,如果一個(gè)用戶可以擁有兩個(gè)角色,在運(yùn)行是只能使用一個(gè)角色,這就是運(yùn)行互斥。例如:未申請具體角色登錄系統(tǒng),角色為“通用角色”。通用角色可以使用系統(tǒng)崗位角色申請功能,同時(shí)也能使用系統(tǒng)中已對“通用角色”開通權(quán)限的功能,例如查看運(yùn)維電話、幫助手冊。
模型4:RBAC3
RBAC3=RBAC1+RBAC2
RBAC3集成了RBAC1的角色分級繼承,同時(shí)也包括RBAC2中的各種限制。如下圖
03 實(shí)例復(fù)盤
1. 前期分析
A系統(tǒng)(企業(yè)內(nèi)部營銷域平臺)是我最近在參與項(xiàng)目之一,主要職責(zé)一部分是設(shè)計(jì)后臺功能,這其中就包含了權(quán)限設(shè)計(jì)。
對于A系統(tǒng)的權(quán)限設(shè)計(jì),我是從下邊三個(gè)點(diǎn)出發(fā)進(jìn)行分析:
什么人用?
用戶從哪來?
作為企業(yè)內(nèi)部使用的營銷系統(tǒng),用戶主體部分都是企業(yè)員工。其中少部分為供應(yīng)商團(tuán)隊(duì)用戶。企業(yè)內(nèi)部員工通過與人力系統(tǒng)進(jìn)行組織對接,打通人力系統(tǒng)與A系統(tǒng)用戶數(shù)據(jù)。員工可以直接使用統(tǒng)一企業(yè)賬號(portal)進(jìn)行登錄。供應(yīng)商團(tuán)隊(duì)用戶是沒有portal的,這部分賬號需要進(jìn)行創(chuàng)建分配。
什么身份(角色)
在找到“人”之后就要進(jìn)行開始“身份”調(diào)研了?!吧矸荨闭{(diào)研階段是跟進(jìn)在整個(gè)業(yè)務(wù)調(diào)研階段中,例如在調(diào)研中會梳理到實(shí)際業(yè)務(wù)組織架構(gòu)。雖然已經(jīng)確認(rèn)有了人力系統(tǒng)組織架構(gòu),但是根據(jù)實(shí)際經(jīng)驗(yàn)往往人力架構(gòu)與實(shí)際業(yè)務(wù)中架構(gòu)會有一些差異。
通過前期業(yè)務(wù)調(diào)研后我們整理出組織架構(gòu),在組織架構(gòu)梳理中明確了組織中父子級對應(yīng)關(guān)系,在前期調(diào)研中也許明確出崗位角色中是否有“限制條件”,例如崗位角色是否有唯一性限制,如下圖所示中每個(gè)分公司里只有一個(gè)運(yùn)營總監(jiān),銷售總監(jiān)等等。(RBAC2中基數(shù)限制)
用什么功能(權(quán)限)
功能權(quán)限分為功能權(quán)限與數(shù)據(jù)權(quán)限。
功能權(quán)限指的角色在系統(tǒng)內(nèi)操作范圍,例如角色A可以點(diǎn)擊報(bào)表導(dǎo)出按鈕或者管理員角色在系統(tǒng)中可以看到后臺管理菜單并可以對其進(jìn)行操作。
數(shù)據(jù)權(quán)限指的角色在系統(tǒng)中可操作的數(shù)據(jù)范圍,例如報(bào)表中只顯示該角色的數(shù)據(jù)范圍內(nèi)數(shù)據(jù),比如上海公司的運(yùn)營總監(jiān)查看數(shù)據(jù)權(quán)限只是上海分公司內(nèi)的,同時(shí)篩選數(shù)據(jù)條件范圍也只限于其權(quán)限內(nèi)。
通過前期業(yè)務(wù)調(diào)研針對不同的業(yè)務(wù)場景流程,在設(shè)計(jì)相關(guān)功能時(shí)需整理出功能權(quán)限表,權(quán)限表體現(xiàn)需要標(biāo)注具體功能可以對哪些角色可見,功能內(nèi)某個(gè)按鈕具體操作權(quán)限。有了這份表格,我們可以在系統(tǒng)上線初始化時(shí),將角色的權(quán)限配置好,方便用戶上線后即用。
2. 設(shè)計(jì)階段
在梳理了用戶,角色,權(quán)限(功能&數(shù)據(jù))關(guān)系后,就要著手進(jìn)行功能設(shè)計(jì)了。
根據(jù)用戶流向策略,繪制出了如下后臺業(yè)務(wù)流程圖(初版)。
用戶來源主要是來自人力組織對接與自行創(chuàng)建分配用戶。人力崗位與角色在對接中形成組織對接關(guān)系,在具體功能權(quán)限賦予時(shí),需要系統(tǒng)運(yùn)營人員根據(jù)實(shí)際業(yè)務(wù)需求進(jìn)行配置。
基于初版流程圖,先整體設(shè)計(jì)出后臺功能架構(gòu)。
用戶中心:賬號管理? ?數(shù)據(jù)管理
角色中心:角色管理? ?角色功能管理? 角色組織崗位管理? 角色數(shù)據(jù)管理
組織管理:組織對接
用戶心中:賬號管理主要功能為賬號創(chuàng)建,查看,刪除,導(dǎo)出,修改,賬號狀態(tài)修改(停用/凍結(jié)).針對供應(yīng)商賬號可以該功能模塊進(jìn)行創(chuàng)建,其他操作可以對所有賬號進(jìn)行。數(shù)據(jù)管理主要展示用戶的數(shù)據(jù)權(quán)限查看,導(dǎo)出,刪除。
角色中心:角色管理主要功能為角色創(chuàng)建,查看,刪除,導(dǎo)出,修改。角色功能管理是角色與功能權(quán)限進(jìn)行配置。角色組織崗位管理為角色與組織崗位關(guān)系的查看、導(dǎo)出。角色數(shù)據(jù)管理可為角色進(jìn)行數(shù)據(jù)模板配置,用戶在提報(bào)角色數(shù)據(jù)權(quán)限時(shí),只能根據(jù)數(shù)據(jù)模板設(shè)置進(jìn)行相應(yīng)權(quán)限提報(bào)。
組織管理:組織對接功能與人力系統(tǒng)進(jìn)行組織對接。
3. 場景演練
張三是新入職新員工,其崗位是上海分公司一級銷售代表。在入職后張三需要使用A系統(tǒng)進(jìn)行日常辦公。因?yàn)锳系統(tǒng)與人力系統(tǒng)有組織對接,所以張三直接使用portal賬號密碼登錄即可,登錄后需要進(jìn)行角色與數(shù)據(jù)權(quán)限申請。
申請時(shí)角色默認(rèn)為組織對接后角色,數(shù)據(jù)權(quán)限申請范圍是該角色可選擇數(shù)據(jù)權(quán)限。例如張三崗位為上海分公司一級銷售代表,其角色為一級銷售代表,那么張三進(jìn)入申請功能時(shí)角色默認(rèn)為一級銷售代表。但申請數(shù)據(jù)數(shù)據(jù)權(quán)限時(shí)只能選擇上海,品牌選擇現(xiàn)在為全部或多選(數(shù)據(jù)權(quán)限是通過角色數(shù)據(jù)管理進(jìn)行配置)。張三選擇完數(shù)據(jù)權(quán)限,提交申請后,審批由張三的上一級領(lǐng)導(dǎo)進(jìn)行操作,審批通過后張三可以以一級銷售代表的角色身份登錄系統(tǒng)開展業(yè)務(wù)。
下圖為新員工角色數(shù)據(jù)權(quán)限流程圖。
后記
由于該項(xiàng)目暫時(shí)還未正式上線,所以復(fù)盤的時(shí)隱藏了大部分信息,例如原型圖。可能會導(dǎo)致大家閱讀起來比較困難,后續(xù)我會根據(jù)實(shí)際情況不斷更新項(xiàng)目實(shí)例。
給大家一點(diǎn)建議:整體權(quán)限設(shè)計(jì)應(yīng)該在項(xiàng)目開始時(shí)就要貫穿其中,優(yōu)秀的后臺權(quán)限設(shè)計(jì)方案,必定是依靠著前臺清晰的功能設(shè)計(jì)而生成的。所以盡量多參與項(xiàng)目調(diào)研階段與需求分析階段,最好整體都參與其中。
在整個(gè)項(xiàng)目權(quán)限設(shè)計(jì)中思想都是基于RBAC模型去設(shè)計(jì)的,RBAC模型的特點(diǎn)之一也是可以靈活多變的支持企業(yè)組織架構(gòu)的伸縮,同時(shí)也提高了運(yùn)維管理的效率。遺憾點(diǎn)是在設(shè)計(jì)初期并未考慮到分公司自行運(yùn)營A系統(tǒng)的長遠(yuǎn)需求(近幾年并不會實(shí)際落地),沒有在設(shè)計(jì)時(shí)提出“租戶”或者“用戶組”概念。
本文由 @Sean 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
請問,數(shù)據(jù)權(quán)限怎么繼承
RBAC1中的子級權(quán)限繼承父級,權(quán)限是越來越大還是越來越小?
子級還可以修改權(quán)限嗎?修改了后,是否父子就脫離了關(guān)系?
子級繼承父級,子級權(quán)限受限于父級。
半年一更