基于業(yè)務(wù)中臺(tái)的多租戶權(quán)限管理設(shè)計(jì)方案
文章是基于業(yè)務(wù)中臺(tái)多租戶權(quán)限管理設(shè)計(jì)的整體方案,筆者梳理了后臺(tái)系統(tǒng)權(quán)限管理設(shè)計(jì)的一般方法、需要解決的問(wèn)題以及總結(jié)了具體的設(shè)計(jì)方案。
一、后臺(tái)系統(tǒng)中權(quán)限管理設(shè)計(jì)的一般方法
在設(shè)計(jì)后臺(tái)系統(tǒng)(如:CRM、EPR、EHR、電商管理后臺(tái)等)時(shí),權(quán)限管理是必不可少的功能,絕大部分的后臺(tái)系統(tǒng)都是處理企業(yè)業(yè)務(wù)流程的,會(huì)涉及到多個(gè)部門的協(xié)同合作,必然需要對(duì)每個(gè)能夠使用系統(tǒng)的用戶進(jìn)行權(quán)限管理。
在一般的單體應(yīng)用的后臺(tái)中權(quán)限管理的大體模式如下:
整體的業(yè)務(wù)邏輯如下:
- 系統(tǒng)中的菜單、頁(yè)面、按鈕、字段以及運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù)都需要注冊(cè)成為系統(tǒng)資源;
- 系統(tǒng)資源打包組合成為角色;
- 角色可以關(guān)聯(lián)用戶,也就完成了資源授權(quán)給用戶的處理
- 角色可以關(guān)聯(lián)用戶組,而用戶組是多個(gè)用戶組合而成的一個(gè)集合,用戶能夠繼承用戶組關(guān)聯(lián)的角色
而在系統(tǒng)運(yùn)行時(shí),任何一個(gè)用戶在使用系統(tǒng)資源時(shí),都需要進(jìn)行授權(quán)校驗(yàn),也就是看這個(gè)用戶關(guān)聯(lián)的所有的角色囊括的資源是否包涵當(dāng)前要訪問(wèn)的資源,如此就完成了用戶權(quán)限管理的控制。
你沒(méi)有看錯(cuò),所有的單體應(yīng)用的權(quán)限管理的實(shí)現(xiàn)邏輯都是如此。
但在基于業(yè)務(wù)中臺(tái)的基礎(chǔ)之上去做權(quán)限管理的設(shè)計(jì)我們需要額外引入更多的概念(租戶、應(yīng)用實(shí)例等)以完成業(yè)務(wù)邏輯。
二、基于業(yè)務(wù)中臺(tái)的多租戶權(quán)限設(shè)計(jì)需要解決的問(wèn)題
所有中臺(tái)建設(shè)的目的都是為了業(yè)務(wù)快速且低成本創(chuàng)新,絕大部分的企業(yè)基于中臺(tái)都會(huì)開(kāi)發(fā)大量的業(yè)務(wù)應(yīng)用,一般基于業(yè)務(wù)中臺(tái)的架構(gòu)如下圖:
從圖中可以看到,在中臺(tái)之上有針對(duì)各個(gè)業(yè)務(wù)開(kāi)展的各種應(yīng)用,而筆者所在的企業(yè)是一家中臺(tái)標(biāo)準(zhǔn)產(chǎn)品的廠商(即把中臺(tái)作為基礎(chǔ)設(shè)施的SaaS廠商),更是加入了多租戶的機(jī)制以滿足不同客戶對(duì)應(yīng)個(gè)性化的需求。
在基于中臺(tái)的多租戶、多應(yīng)用的場(chǎng)景下,我們做權(quán)限管理的設(shè)計(jì)面臨如下主要問(wèn)題:
- 在出廠時(shí)需要提供特殊的初始化權(quán)限管理流程;
- 對(duì)于購(gòu)買SaaS產(chǎn)品的客戶而言,權(quán)限需要集中進(jìn)行管理,以減少運(yùn)營(yíng)人員的工作內(nèi)容;
- 對(duì)于不同的角色/場(chǎng)景有不同的權(quán)限管理的需求。
三、具體的設(shè)計(jì)方案闡述
在解決以上問(wèn)題之前我首先介紹下我們公司的整體產(chǎn)品架構(gòu):
業(yè)務(wù)中臺(tái)是我們所有應(yīng)用的基礎(chǔ)設(shè)施,我們能夠通過(guò)MPC 配置各個(gè)應(yīng)用所需要的業(yè)務(wù)能力,把業(yè)務(wù)能力組合起來(lái)就能形成一個(gè)應(yīng)用,如此我們實(shí)現(xiàn)了業(yè)務(wù)中臺(tái)的能力復(fù)用以及快速支撐業(yè)務(wù)創(chuàng)新。
在這個(gè)業(yè)務(wù)模式中,應(yīng)用均是通過(guò)配置在進(jìn)行一定的前端頁(yè)面開(kāi)發(fā)形成,我們可以為每個(gè)租戶生產(chǎn)其所需要的應(yīng)用實(shí)例,租戶下的數(shù)據(jù)是隔離的。
在客戶購(gòu)買我們整個(gè)標(biāo)準(zhǔn)產(chǎn)品后(包括業(yè)務(wù)中臺(tái)、MPC、BOC以及預(yù)置應(yīng)用),首先我們?cè)贛PC中預(yù)置了一個(gè)root賬戶,通過(guò)該賬戶我能夠創(chuàng)建租戶,并為租戶實(shí)例化應(yīng)用,在實(shí)例化應(yīng)用的同時(shí),為該租戶生成在該應(yīng)用實(shí)例下的租戶管理員。
租戶管理員能夠進(jìn)入BOC進(jìn)行全局的權(quán)限管理,例如:他能在該租戶下創(chuàng)建用戶,并設(shè)置該用戶能夠登錄的應(yīng)用;他能為租戶下的任一應(yīng)用實(shí)例創(chuàng)建角色,并把該角色分配租戶下的用戶。
租戶管理員管理權(quán)限的模式如下:
整體業(yè)務(wù)邏輯:
- 系統(tǒng)初始化時(shí),需要生成root賬號(hào),該賬號(hào)由系統(tǒng)預(yù)置所有資源權(quán)限
- root賬號(hào)能夠創(chuàng)建租戶,并為租戶實(shí)例化應(yīng)用
- 實(shí)例化應(yīng)用的時(shí)候需要為租戶生成租戶管理員并賦予租戶管理員該應(yīng)用實(shí)例的管理員權(quán)限(管理員角色為應(yīng)用預(yù)置)
以上是解決出廠初始化時(shí)的特殊的權(quán)限管理處理邏輯。
租戶管理員能夠在全局管理(BOC)中管理租戶下的用戶信息,并能夠?yàn)橛脩絷P(guān)聯(lián)應(yīng)用及應(yīng)用中的角色;
原型示意圖
租戶管理員能夠在全局管理中管理每一個(gè)應(yīng)用實(shí)例中角色;
具有應(yīng)用實(shí)例權(quán)限的用戶能夠進(jìn)入應(yīng)用,并創(chuàng)建該應(yīng)用實(shí)例下的用戶、角色。
四、總結(jié)
以上就是我在基于業(yè)務(wù)中臺(tái)多租戶下權(quán)限管理設(shè)計(jì)的整體方案,租戶是在SaaS模式下隔離數(shù)據(jù)使用,在數(shù)據(jù)層面有自己的獨(dú)立空間;
應(yīng)用實(shí)例指的是租戶數(shù)據(jù)空間中運(yùn)行的應(yīng)用;用戶是使用系統(tǒng)的直接對(duì)象,其能夠使用資源是由其關(guān)聯(lián)的角色決定;資源指的是系統(tǒng)中的菜單、頁(yè)面、按鈕、字段以及運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù)。
理清這些概念后即使是再?gòu)?fù)雜的系統(tǒng)我們進(jìn)行權(quán)限管理設(shè)計(jì)也是不在話下。
對(duì)應(yīng)上內(nèi)容如有異議,歡迎大家隨時(shí)與我探討。
本文由 @keeliu 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理?,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自 unsplash,基于 CC0 協(xié)議
可以加個(gè)V 溝通嗎
有沒(méi)有超級(jí)管理員管理所有租戶說(shuō)法?例如這個(gè)超級(jí)管理員能看和操作所有租戶數(shù)據(jù)且一租戶一獨(dú)立數(shù)據(jù)庫(kù)。
請(qǐng)問(wèn)您這邊最后設(shè)計(jì)這個(gè)了么,超級(jí)管理員,我當(dāng)前就在糾結(jié)這個(gè)。
有個(gè)問(wèn)題咨詢下:多租戶模式下,您文章里的所列的應(yīng)用,可能會(huì)涉及到C端用戶,商家,平臺(tái)運(yùn)營(yíng)人員(管理員),或者還有供應(yīng)鏈端(工廠端),那這些用戶都當(dāng)作租戶來(lái)定義么?存儲(chǔ)在一起 還是會(huì)分開(kāi)?
以一個(gè)企業(yè)為單位進(jìn)行租戶定義
非常感謝 有收獲
root屬于哪個(gè)租戶呢?
root屬于管理員,和admin是一個(gè)意思,Linux系統(tǒng)中常用的,不屬于租戶
用戶和租戶有啥區(qū)別呢?
和我們現(xiàn)在做的多系統(tǒng)集成平臺(tái)的后臺(tái)管理思路差不多,有空我也寫(xiě)一篇交流一下
寫(xiě)了嗎
希望能繼續(xù)展開(kāi)講講. 寫(xiě)的非常好哈. 尤其中臺(tái)控制管理臺(tái)里的模塊再進(jìn)一步講就好了
再說(shuō)句,作者把事兒說(shuō)復(fù)雜了
到底怎么樣的業(yè)務(wù)中臺(tái)-用戶中心才是合理的呢?
一個(gè)用戶有多個(gè)角色可以獲取多種系統(tǒng)資源,一點(diǎn)兒都不難;難在怎么針對(duì)用戶的不同場(chǎng)景來(lái)隔離角色,避免資源一股腦兒甩給他,讓他自己來(lái)挑選(誰(shuí)讓他有這么多角色呢)。所以,角色/權(quán)限定義沒(méi)毛病的前提下,,,問(wèn)題的核心在于如何識(shí)別用戶使用系統(tǒng)的場(chǎng)景,最簡(jiǎn)單的辦法當(dāng)然是分系統(tǒng)或者分端咯,用物理隔離的方法。復(fù)雜一點(diǎn)就要深入業(yè)務(wù)流程中,看看上他進(jìn)來(lái)操作的業(yè)務(wù)目的是啥,一般情況下一種角色代表一種特定的業(yè)務(wù)目的,如果業(yè)務(wù)目的可以明確了,那么系統(tǒng)自動(dòng)幫忙選角色也不難了。
看到你的評(píng)論很受啟發(fā),謝謝`
到底怎么樣的用戶中心,才是合理的呢?
來(lái)加我這10年老??
大部分文章都看到你的留言
總覺(jué)得用戶組的概念有點(diǎn)模糊,角色定義了權(quán)限范圍,然后關(guān)聯(lián)一批用戶,形成用戶組,此時(shí)角色和用戶組是一對(duì)一的,但是看你的關(guān)系圖怎么感覺(jué)是一組多個(gè)角色??
同一角色,可以同時(shí)屬于多用戶組,同一用戶只能歸屬一個(gè)組。
能否理解為用戶與用戶組是多對(duì)一,用戶和角色多對(duì)多,用戶組和角色多對(duì)多?
用戶組和角色是一對(duì)一的,那么使用角色是不是可以代替用戶組呢?單獨(dú)弄一個(gè)用戶組的核心目的是啥?
這里用戶組應(yīng)該只是多個(gè)用戶而已,沒(méi)什么特別的含義(和多個(gè)用戶分別對(duì)應(yīng)角色一樣)。作者想要強(qiáng)調(diào)的應(yīng)該是權(quán)限是角色定義的,然后不管是用戶還是用戶組都是通過(guò)和角色多對(duì)多來(lái)獲得權(quán)限的。
不得不說(shuō) 真的沒(méi)看懂
這篇文章中用戶管理模塊是用于 統(tǒng)一用戶體系用于多應(yīng)用的模式種,比一般的單應(yīng)用系統(tǒng)會(huì)復(fù)雜點(diǎn)。解決的場(chǎng)景:一個(gè)企業(yè)內(nèi)部可能有多個(gè)應(yīng)用(erp\crm\wms等)想用同一套用戶體系進(jìn)行管理。
我的意思是:你的文檔寫(xiě)的沒(méi)看懂
我看懂了