淺談權(quán)限配置能力設(shè)計(jì)
編輯導(dǎo)語(yǔ):權(quán)限配置能力,可以為各應(yīng)用提供權(quán)限配置原子能力,幫助應(yīng)用快速集成權(quán)限配置,提高系統(tǒng)權(quán)限管理體驗(yàn)。本文作者分析了如何以RBAC模型設(shè)計(jì)可配置的權(quán)限中心,一起來(lái)看一下吧。
權(quán)限配置能力作為權(quán)限控制器,為各應(yīng)用提供權(quán)限配置原子能力。這里聊聊,如果想要以RBAC模型設(shè)計(jì)可配置的權(quán)限中心,該怎么入手。
筆者根據(jù)自己的行業(yè)經(jīng)驗(yàn)總結(jié)了一下思路,歡迎大家批評(píng)指正。
所謂權(quán)限配置能力,就是以權(quán)限、角色為中心,把權(quán)限配置單獨(dú)作為原子能力服務(wù),高度抽象,為開發(fā)者、運(yùn)營(yíng)人員提供一整套對(duì)菜單、接口和數(shù)據(jù)資源進(jìn)行授權(quán),同時(shí)提供標(biāo)準(zhǔn)授權(quán)界面,幫助應(yīng)用快速集成權(quán)限配置,為業(yè)務(wù)運(yùn)營(yíng)集成權(quán)限統(tǒng)一管理,形成標(biāo)準(zhǔn)化流程,提高系統(tǒng)權(quán)限管理體驗(yàn)。
權(quán)限配置能力,主要實(shí)現(xiàn)的是從用戶角色到功能應(yīng)用的權(quán)限控制器,提供管理功能權(quán)限、數(shù)據(jù)權(quán)限的基礎(chǔ)能力,提供權(quán)限服務(wù)(管理+控制)能力給每一個(gè)應(yīng)用使用,免除重復(fù)開發(fā)、考慮不全的問題。
一、什么是RBAC模型
首先,我們來(lái)說(shuō)說(shuō)什么是RBAC模型。
RBAC認(rèn)為權(quán)限授權(quán)的過(guò)程可以抽象地概括為:Who是否可以對(duì)What進(jìn)行How的訪問操作,并對(duì)這個(gè)邏輯表達(dá)式進(jìn)行判斷是否為True的求解過(guò)程,也即是將權(quán)限問題轉(zhuǎn)換為What、How的問題,可以說(shuō),Who、What、How構(gòu)成了訪問權(quán)限三元組。
1. 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)限的管理。
- 用戶-角色映射:用戶和角色之間的映射關(guān)系
- 角色-權(quán)限映射:角色和權(quán)限之間的映射關(guān)系
(注:圖來(lái)源于網(wǎng)絡(luò),如侵權(quán)可告知?jiǎng)h除)
2. 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)限。
3. RBAC的優(yōu)缺點(diǎn)
RBAC模型優(yōu)點(diǎn)是簡(jiǎn)化了用戶和權(quán)限的關(guān)系易擴(kuò)展、易維護(hù)。
但也存在一定的局限性,比如,RBAC模型沒有提供操作順序的控制機(jī)制,這一缺陷使得RBAC模型很難適應(yīng)哪些對(duì)操作次序有嚴(yán)格要求的系統(tǒng)。
二、權(quán)限控制框架
聊完了RBAC模型,我們可以先看看權(quán)限控制框架設(shè)計(jì)。
剛剛提到過(guò),所謂權(quán)限,就是對(duì)資源、數(shù)據(jù)等進(jìn)行配置,不同的人分配不同的權(quán)限??梢哉f(shuō),權(quán)限控制框架其實(shí)就是將不同的資源、數(shù)據(jù)分配給不同的角色,從而完成授權(quán)行為。
1. 權(quán)限配置
針對(duì)不同的角色配置相應(yīng)的授控資源(包括菜單、接口、數(shù)據(jù)資源等)完成授權(quán)配置。
具體配置流程需要對(duì)應(yīng)用系統(tǒng)的資源進(jìn)行錄入(包括菜單資源、接口資源、數(shù)據(jù)資源)后,對(duì)業(yè)務(wù)應(yīng)用系統(tǒng)的資源進(jìn)行重新配置為權(quán)限策略,最后對(duì)角色進(jìn)行賦權(quán)以及角色綁定用戶。
完成配置后,業(yè)務(wù)系統(tǒng)通過(guò)調(diào)用對(duì)外服務(wù)的SDK標(biāo)準(zhǔn)組件或接入API接口,判斷資源與用戶/角色的關(guān)聯(lián)關(guān)系后進(jìn)行權(quán)限控制即可。
實(shí)際上,授權(quán)不僅僅可以對(duì)角色進(jìn)行授權(quán),實(shí)際上還可以通過(guò)將角色與組織機(jī)構(gòu)、行政區(qū)劃、標(biāo)簽等緯度進(jìn)行關(guān)聯(lián)授權(quán),甚至是直接將用戶與組織機(jī)構(gòu)、行政區(qū)劃、標(biāo)簽等緯度進(jìn)行關(guān)聯(lián)授權(quán)。但在本文中,暫時(shí)先不考慮這種多維度的授權(quán)邏輯,只討論常規(guī)授權(quán)邏輯。
2. 鑒權(quán)服務(wù)
針對(duì)具體的運(yùn)行環(huán)境,判斷授權(quán)對(duì)象是否對(duì)授控資源具有某種操作或數(shù)據(jù)范圍的權(quán)限。
三、資源管理
權(quán)限策略的前提時(shí),需要對(duì)應(yīng)用系統(tǒng)的資源(包括菜單資源、接口資源、數(shù)據(jù)資源)進(jìn)行錄入。
在系統(tǒng)初始化時(shí),由超級(jí)管理員或開發(fā)人員完成碼資源管理的錄入和管理,后續(xù)可集成到相應(yīng)的管理平臺(tái)中,為產(chǎn)品運(yùn)營(yíng)提供靈活可控的權(quán)限控制。
1. 菜單資源
菜單資源,指的是對(duì)業(yè)務(wù)系統(tǒng)的前端功能菜單/頁(yè)面資源進(jìn)行錄入管理,以獨(dú)立的URL進(jìn)行區(qū)分,可進(jìn)行分層級(jí)管理。
- 新增菜單資源:需要填寫資源名稱、資源編碼、資源路徑、排序號(hào)、打開方式等信息
- 新增子菜單:需要填寫資源名稱、資源編碼、資源路徑、菜單等級(jí)和上級(jí)菜單、排序號(hào)、打開方式等信息
- 查詢:比如可根據(jù)菜單名稱、ID等進(jìn)行搜索
- 編輯:編輯菜單資源的基本信息,這里需要注意的是,要確定資源的唯一性及是否可修改等等
- 刪除:刪除菜單資源,可設(shè)置一定的校驗(yàn)規(guī)則,比如需要?jiǎng)h除下級(jí)菜單,才可以刪除上級(jí)菜單
- 批量導(dǎo)入:可按照標(biāo)準(zhǔn)文檔要求,批量導(dǎo)入菜單信息
2. 接口資源
接口資源,指的是對(duì)業(yè)務(wù)系統(tǒng)的后端接口資源進(jìn)行錄入、管理,可以錄入U(xiǎn)RL關(guān)鍵字段和接口請(qǐng)求方式。
- 新增接口資源:需要填寫選擇資源名稱、資源編碼、資源路徑、請(qǐng)求方式等
- 查詢:比如根據(jù)接口名稱、接口地址進(jìn)行搜索
- 編輯:編輯接口資源
- 刪除:刪除接口資源
- 批量導(dǎo)入:可按照標(biāo)準(zhǔn)文檔要求,批量導(dǎo)入接口信息
3. 數(shù)據(jù)資源
數(shù)據(jù)資源,主要指業(yè)務(wù)系統(tǒng)中存儲(chǔ)的數(shù)據(jù)資源,通過(guò)字段信息進(jìn)行區(qū)分,可以通過(guò)唯一編碼錄入權(quán)限管理。
- 新增數(shù)據(jù)資源:需要填寫選擇數(shù)據(jù)元素名稱、元素編碼、所屬頁(yè)面名稱、所屬菜單路徑等
- 查詢:比如根據(jù)字段名稱進(jìn)行搜索
- 編輯:編輯數(shù)據(jù)字段資源
- 刪除:刪除數(shù)據(jù)字段資源
- 批量導(dǎo)入:可按照標(biāo)準(zhǔn)文檔要求,批量導(dǎo)入字段信息
四、權(quán)限策略
根據(jù)業(yè)務(wù)應(yīng)用實(shí)際情況,建立權(quán)限策略管理功能,對(duì)已經(jīng)納入管理的資源,包括資源管理添加的菜單、接口、數(shù)據(jù)字段資源進(jìn)行重新配置權(quán)限,管理權(quán)限與資源的關(guān)聯(lián)邏輯。
從控制力度來(lái)看,權(quán)限管理分為兩大類:功能權(quán)限管理和數(shù)據(jù)權(quán)限管理。
在系統(tǒng)初始化時(shí),由超級(jí)管理員或開發(fā)人員完成碼權(quán)限策略的配置和管理,后續(xù)可集成到管理平臺(tái)中,為產(chǎn)品運(yùn)營(yíng)提供靈活可控的權(quán)限控制。
1. 功能權(quán)限
1)定義
通俗的說(shuō),功能權(quán)限指用戶登錄系統(tǒng)后能看到哪些模塊,操作哪些按鈕。每個(gè)角色有配置固定的功能權(quán)限,角色之間權(quán)限相互隔離。所有角色的對(duì)應(yīng)功能權(quán)限由管理后臺(tái)進(jìn)行配置。
2)分類
功能權(quán)限包括:業(yè)務(wù)功能、授權(quán)功能。
- 業(yè)務(wù)功能:根據(jù)業(yè)務(wù)場(chǎng)景,定義不同的業(yè)務(wù)功能。結(jié)合實(shí)際業(yè)務(wù)場(chǎng)景,進(jìn)行業(yè)務(wù)功能與角色關(guān)聯(lián)配置,完成相關(guān)角色的權(quán)限配置。
- 授權(quán)功能:若該角色具有“授權(quán)管理”功能,則需要通過(guò)管理后臺(tái)配置允許該角色進(jìn)行授權(quán)的子角色。
2. 數(shù)據(jù)權(quán)限
1)定義
如果所有信息都是公開透明的,也就不需要做數(shù)據(jù)權(quán)限的控制??刹煌臉I(yè)務(wù)形態(tài)多而雜,每個(gè)人、每個(gè)角色需要看到的、應(yīng)該看到的數(shù)據(jù)不同,數(shù)據(jù)權(quán)限便應(yīng)這些需要和規(guī)則而生。
數(shù)據(jù)權(quán)限較比于其他兩個(gè)權(quán)限較為抽象,指的是用戶是否有針對(duì)某些數(shù)據(jù)的瀏覽權(quán)限,用戶在某個(gè)模塊里能看到哪些范圍的數(shù)據(jù)。不同角色在同一個(gè)頁(yè)面看到的信息是不同的,可以通過(guò)組織架構(gòu)來(lái)區(qū)分。
2)業(yè)務(wù)決定
對(duì)于數(shù)據(jù)權(quán)限的管理比較復(fù)雜,這個(gè)主要還是有具體的業(yè)務(wù)來(lái)決定的。數(shù)據(jù)權(quán)限一般和組織架構(gòu)相關(guān)。根據(jù)組織機(jī)構(gòu)的層級(jí)關(guān)系,結(jié)合業(yè)務(wù)實(shí)際場(chǎng)景,實(shí)現(xiàn)不同角色的數(shù)據(jù)權(quán)限的劃分。
比如A業(yè)務(wù)經(jīng)理只能看到自己的客戶數(shù)據(jù),但是A的業(yè)務(wù)總監(jiān)可以查看到各個(gè)區(qū)域業(yè)務(wù)員的客戶數(shù)據(jù)。
3)數(shù)據(jù)權(quán)限向上兼容原則
數(shù)據(jù)權(quán)限向上兼容,若出現(xiàn)多層級(jí)授權(quán)場(chǎng)景,上級(jí)可以對(duì)查看下級(jí)信息(包括統(tǒng)計(jì)信息、授權(quán)信息等)。當(dāng)用戶獲取數(shù)據(jù)時(shí),根據(jù)自己當(dāng)前的部門和職位,獲取到所有下屬的職員信息。
例:業(yè)務(wù)管理員可以查看其管轄范圍內(nèi)次級(jí)管理員或業(yè)務(wù)員的所有信息。
3. 權(quán)限策略
對(duì)已經(jīng)在【資源管理】已經(jīng)錄入的資源,在【權(quán)限策略】進(jìn)行重新配置為權(quán)限策略。
- 新增權(quán)限策略:需要填寫功能名稱、功能URL路徑、功能描述、行政區(qū)劃、組織機(jī)構(gòu)等,對(duì)【權(quán)限策略列表】進(jìn)行勾選
- 查看:對(duì)已授權(quán)功能進(jìn)行展示,并可以展開查看所有資源明細(xì)
- 編輯:編輯功能權(quán)限
- 刪除:刪除功能權(quán)限
- 關(guān)聯(lián)角色:關(guān)聯(lián)角色,對(duì)角色進(jìn)行賦權(quán)
五、角色管理
在系統(tǒng)初始化時(shí),由超級(jí)管理員或開發(fā)人員完成角色管理的配置和管理,后續(xù)可集成到管理平臺(tái)中,為產(chǎn)品運(yùn)營(yíng)提供靈活可控的權(quán)限控制。
1. 角色授權(quán)
在功能權(quán)限策略管理功能已經(jīng)完成功能權(quán)限配置后,需要對(duì)角色進(jìn)行賦權(quán),賦權(quán)后展示角色對(duì)已授權(quán)功能權(quán)限和資源明細(xì)全景圖,便于配置維護(hù)??蓪⒔巧c用戶進(jìn)行綁定,完成角色授權(quán)。
- 新增角色:需填寫角色的名稱、角色類型、角色層級(jí)(行政區(qū)劃、組織機(jī)構(gòu))
- 編輯角色:編輯角色
- 關(guān)聯(lián)權(quán)限:關(guān)聯(lián)權(quán)限策略,對(duì)角色進(jìn)行賦權(quán)
- 關(guān)聯(lián)用戶:將角色與用戶關(guān)聯(lián)起來(lái),從而實(shí)現(xiàn)對(duì)用戶授權(quán)
2. 角色的組織屬性
1)行政區(qū)劃
行政區(qū)劃是行政區(qū)域劃分的簡(jiǎn)稱,是國(guó)家為了進(jìn)行分級(jí)管理而實(shí)行的區(qū)域劃分。一般來(lái)說(shuō),我國(guó)的行政區(qū)劃管理體系顆粒度可到省-市-區(qū)-街道-社區(qū)村居5級(jí)管理。
一個(gè)管理員只對(duì)應(yīng)一個(gè)行政區(qū)劃,管理員下的查驗(yàn)員都跟著管理員的行政區(qū)劃。
注意:很多時(shí)候,行政區(qū)劃不是必要的組織屬性,一般的to B企業(yè)基本不會(huì)用到該字段信息。但有時(shí)候?qū)τ谡?wù)行業(yè)相關(guān)的應(yīng)用系統(tǒng),行政區(qū)劃信息還是必要的。
2)組織架構(gòu)
組織機(jī)構(gòu)是行政組織機(jī)構(gòu)管理的簡(jiǎn)稱,是為了實(shí)現(xiàn)在不同組織機(jī)構(gòu)、部門等層級(jí)的分級(jí)管理設(shè)計(jì)。根據(jù)組織機(jī)構(gòu)的層級(jí)關(guān)系,結(jié)合業(yè)務(wù)實(shí)際場(chǎng)景,實(shí)現(xiàn)不同角色的功能權(quán)限、數(shù)據(jù)權(quán)限的劃分。
3. 角色層級(jí)
1)定義
角色層級(jí)可配置3-5個(gè)層級(jí),包括普通用戶、管理端的管理人員和業(yè)務(wù)角色。所有角色根據(jù)不同場(chǎng)景、不同業(yè)務(wù)需求決定,角色之間的授權(quán)限制條件也與業(yè)務(wù)場(chǎng)景相關(guān)。
2)分類
角色可以分為管理角色、業(yè)務(wù)角色。
- 管理角色:具備數(shù)據(jù)查看權(quán)限、具備授權(quán)功能,同時(shí)也可以擁有業(yè)務(wù)角色的功能權(quán)限
- 業(yè)務(wù)角色:具備業(yè)務(wù)功能,根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景判斷是否具備授權(quán)功能(一般不具備)
3)角色權(quán)限說(shuō)明
所有角色與用戶的關(guān)聯(lián)可通過(guò)管理后臺(tái)進(jìn)行授權(quán)操作。
六、用戶賦權(quán)
1. 用戶管理
用戶管理當(dāng)前提供后臺(tái)系統(tǒng)賬號(hào)的新增和批量導(dǎo)入功能,添加用戶時(shí)需要添加用戶的業(yè)務(wù)屬性,包括角色和角色權(quán)限。
2. 用戶授權(quán)
通過(guò)管理后臺(tái)或小程序,將用戶與角色綁定關(guān)聯(lián),實(shí)現(xiàn)用戶賦權(quán)。一旦用戶被分配了適當(dāng)?shù)慕巧?,該用戶就擁有此角色的所有操作?quán)限。
用戶與角色是多對(duì)多的關(guān)系。一個(gè)用戶可以擁有若干角色,一個(gè)角色也可以賦予若干用戶。
3. 多角色并存機(jī)制
多個(gè)角色并存的時(shí)候,不同角色的擁有不同功能權(quán)限的功能模塊。這里需要分兩種情況進(jìn)行分析。
1)角色權(quán)限向上兼容原則
用戶可以通過(guò)角色切換來(lái)進(jìn)行功能模塊的切換,但角色權(quán)限也存在向上兼容原則,也就是說(shuō),高級(jí)權(quán)限可以覆蓋低層級(jí)權(quán)限。
比如,一個(gè)用戶可能即是公司員工又是管理人員,那么這時(shí)候他既有普通員工的角色權(quán)限,也有管理層(比如業(yè)務(wù)經(jīng)理)的角色權(quán)限,這時(shí)候他登錄時(shí)無(wú)需進(jìn)行角色切換,而是直接以他所擁有的最高層級(jí)角色登陸系統(tǒng),顯示他最高層級(jí)角色的功能頁(yè)面即可。
2)角色權(quán)限無(wú)法兼容
但也會(huì)存在另一種情況,就是可能在系統(tǒng)內(nèi),某個(gè)用戶他既是財(cái)務(wù)人員,又身兼監(jiān)管部門要職,而這兩種角色的功能業(yè)務(wù)可能會(huì)存在某種沖突,系統(tǒng)不允許同一用戶同時(shí)兼容這兩種身份,但實(shí)際上企業(yè)內(nèi)部又出現(xiàn)了這種情況。那么我們就得對(duì)這兩種角色的權(quán)限進(jìn)行隔離,讓同一用戶能在系統(tǒng)中身兼多任(注:這里提供的案例可能不是非常準(zhǔn)確)。
這里提供一個(gè)筆者的解決方案,各位如果有更好的解決思路,歡迎補(bǔ)充~
當(dāng)面臨這種角色權(quán)限無(wú)法兼容時(shí),可以通過(guò)角色切換實(shí)現(xiàn)對(duì)角色權(quán)限的隔離。比如:
若用戶只有1個(gè)角色或同時(shí)擁有2哥及以上的角色但角色可向上兼容,登錄時(shí)默認(rèn)使用該用戶最高層級(jí)的角色登錄,加載最高層級(jí)角色的功能頁(yè)面;
若用戶有2個(gè)及以上的角色,但角色之間可能存在無(wú)法兼容的情況,登錄時(shí)彈框加載該用戶所有角色的列表,讓用戶自己選擇角色后,加載該角色的功能頁(yè)面。
同時(shí)提示可以在【我的】->【角色切換】進(jìn)行角色的切換,并在本地緩存該角色的記錄,下次登錄時(shí)通過(guò)讀取緩存,自動(dòng)加載該角色的功能頁(yè)面。
七、其他授權(quán)
這里需要說(shuō)明的是,授權(quán)不僅僅可以對(duì)角色進(jìn)行功能授權(quán),實(shí)際上還可以通過(guò)將角色與組織機(jī)構(gòu)、行政區(qū)劃、標(biāo)簽等緯度進(jìn)行關(guān)聯(lián)授權(quán),甚至是直接將用戶與組織機(jī)構(gòu)、行政區(qū)劃、標(biāo)簽等緯度進(jìn)行關(guān)聯(lián)授權(quán)。
但在本文中,暫時(shí)先不考慮這種多維度的授權(quán)邏輯,只討論常規(guī)的功能授權(quán)。
這里筆者只根據(jù)自己的經(jīng)驗(yàn)整理了一下思路,歡迎大家積極吐槽,期待能與大家一起討論找到更好的解決方案,謝謝各位的賞讀~
本文由 @Elaine 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自Pexels,基于 CC0 協(xié)議。
感謝分享,受益匪淺
嗯嗯學(xué)習(xí)到了,作者分享以RBAC模型設(shè)計(jì)可配置的權(quán)限中心的方法感覺很專業(yè)哈哈。
作者大大詳細(xì)的講解了如何以RBAC模型設(shè)計(jì)可配置的權(quán)限中心,受益匪淺。