本文首先引入多利熊業(yè)務(wù)介紹,引出多利熊業(yè)務(wù)建設(shè)權(quán)限系統(tǒng)的痛點(diǎn),接著分別從權(quán)限系統(tǒng)模型、權(quán)限系統(tǒng)設(shè)計(jì)以及多利熊業(yè)務(wù)業(yè)務(wù)應(yīng)用方面詳細(xì)探討了具體的方案和設(shè)計(jì),最后對(duì)權(quán)限系統(tǒng)設(shè)計(jì)思考,對(duì)數(shù)據(jù)維度建設(shè)拋磚引玉,讓大家一起思考解決方案。
GEEK TALK
01
業(yè)務(wù)介紹
多利熊,是百度旗下的本地生活服務(wù)平臺(tái)。多利熊旨在為用戶提供特低價(jià)優(yōu)惠的品質(zhì)服務(wù),基于百度的AI和雙引擎能力,以改變市場(chǎng)格局之勢(shì)迅速推進(jìn),為本地商家提供豐富的營(yíng)銷渠道,決心成為本地生活市場(chǎng)的重塑性力量。
多利熊覆蓋餐飲、酒店、景區(qū)、休閑娛樂、麗人等眾多品類。用戶可以花更少的錢享受多利熊甄選的本地生活品質(zhì)服務(wù)。成為多利熊分銷達(dá)人,自購更省錢,分享直賣可賺取傭金,鎖粉政策可讓達(dá)人長(zhǎng)期賺取用戶自行下單傭金,發(fā)展下游達(dá)人組建團(tuán)隊(duì)更可賺取團(tuán)隊(duì)傭金。
多利熊架構(gòu)是如何支撐起整個(gè)業(yè)務(wù)生態(tài)運(yùn)轉(zhuǎn),如下圖所示:

如圖所示,多利熊整個(gè)業(yè)務(wù)架構(gòu)分位三層。包括:生態(tài)場(chǎng)景層、平臺(tái)支撐層、基礎(chǔ)建設(shè)層。
-
多利熊生態(tài)場(chǎng)景:多利熊除了在百度的雙引擎、百家號(hào)、私域中進(jìn)行分發(fā)外,還擴(kuò)展到了微信生態(tài)圈,建設(shè)了多利熊微信小程序,用于在微信生態(tài)的分發(fā),通過微信群、微信分享、微信達(dá)人引流。除了自建外,也通過合作方式引入第三方服務(wù)商、自研商家、本地生活服務(wù)平臺(tái),從而打造多元化、多類型的本地生活服務(wù)生態(tài)圈。
-
多利熊平臺(tái)支撐:多利熊建設(shè)了大量平臺(tái),包括:商戶平臺(tái)、運(yùn)營(yíng)平臺(tái)、審核平臺(tái)、小編平臺(tái)、分發(fā)平臺(tái)、干預(yù)平臺(tái)、質(zhì)量平臺(tái)等等。通過豐富的平臺(tái),降低運(yùn)營(yíng)成本、提升商家接入效率,從而更好的支撐業(yè)務(wù)的高速發(fā)展,快速迭代。
-
多利熊基礎(chǔ)建設(shè):多利熊的基礎(chǔ)建設(shè)層,通過集成小程序及百度中臺(tái)的眾多沉淀系統(tǒng),迅速支撐業(yè)務(wù)快速迭代。包括:小程序自研的服務(wù)化治理方案:天路、天眼、BRCC;小程序沉淀的數(shù)據(jù)多維度分析報(bào)表和穩(wěn)定性建設(shè)監(jiān)控和治理手段;以及百度豐富的中臺(tái)系統(tǒng):交易中臺(tái)、營(yíng)銷中臺(tái)、互動(dòng)中臺(tái)、審核中臺(tái)等等。
從圖中可以看到,整個(gè)多利熊業(yè)務(wù)架構(gòu)中,平臺(tái)角色眾多,權(quán)限系統(tǒng)面臨非常多的挑戰(zhàn)。
-
平臺(tái)眾多,各個(gè)平臺(tái)的賬號(hào)系統(tǒng)也會(huì)存在差異性。權(quán)限系統(tǒng)如何支持各平臺(tái)的隔離設(shè)置,保證平臺(tái)數(shù)據(jù)的合規(guī)性和安全性?
-
多個(gè)平臺(tái)中存在眾多業(yè)務(wù)角色、角色存在上下級(jí)關(guān)系,大家需要協(xié)同工作。權(quán)限系統(tǒng)如何支持高效的配置,保障多角色協(xié)同、高效、便利操作?
-
多個(gè)平臺(tái)基于不同語言開發(fā)。權(quán)限系統(tǒng)如何保證接入的便捷性?
具體我們是如何建設(shè),解決這些問題的呢?下面將詳細(xì)介紹下。
GEEK TALK
02
權(quán)限系統(tǒng)介紹
2.1權(quán)限系統(tǒng)模型
RBAC(role-based access control):基于角色的權(quán)限訪問控制。
RBAC是一種圍繞角色和權(quán)限定義的訪問控制機(jī)制,在RBAC中,權(quán)限與角色相關(guān)聯(lián),用戶通過成為適當(dāng)角色的成員而得到這些角色的權(quán)限。這就極大地簡(jiǎn)化了權(quán)限的管理。在一個(gè)組織中,角色是為了完成各種工作而創(chuàng)造,用戶則依據(jù)它的責(zé)任和資格來被指派相應(yīng)的角色,用戶可以很容易地從一個(gè)角色被指派到另一個(gè)角色。角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限,而權(quán)限也可根據(jù)需要而從某角色中回收。角色與角色的關(guān)系可以建立起來以囊括更廣泛的客觀情況。
RBAC四個(gè)核心組成部分:
-
S(Subject):主體,一名使用者或自動(dòng)代理人
-
R(Role):角色信息,被定義為一個(gè)授權(quán)等級(jí)的工作職位或職稱
-
SE(Session):會(huì)話級(jí)別的身份權(quán)限表達(dá),S,R或P之間的映射關(guān)系
-
P(Permissions):權(quán)限,一種存取資源的方式
RBAC 定義了三個(gè)主要規(guī)則:
-
角色分配:只有當(dāng)主體選擇或分配了角色時(shí),主體才能行使權(quán)限
-
角色授權(quán):主體的活動(dòng)角色必須為主體授權(quán)。使用上面的規(guī)則 1,此規(guī)則確保用戶只能承擔(dān)他們被授權(quán)的角色
-
權(quán)限授權(quán):只有為主體的活動(dòng)角色授權(quán)了權(quán)限,主體才能行使權(quán)限。對(duì)于規(guī)則 1 和 2,此規(guī)則確保用戶只能行使他們被授權(quán)的權(quán)限
RBAC的四個(gè)模型:
-
Flat RBAC:基本的 RBAC 模型,基本的概念是 用戶被分配給角色,權(quán)限也被分配給角色,用戶通過角色獲取對(duì)應(yīng)的權(quán)限
-
Hierarchical RBAC:角色被組織成分層結(jié)構(gòu),其中“較高”層級(jí)的角色從的“較低”層級(jí)的角色繼承所有權(quán)限
-
Constrained RBAC:向角色添加職責(zé)分離 (SOD) 的實(shí)施
-
Symmetric RBAC:添加了權(quán)限角色審查的要求,類似于 Flat RBAC 中描述的用戶角色審查
四種模型的等級(jí)和功能描述:

Flat RBAC模型結(jié)構(gòu):

Hierarchical RBAC模型結(jié)構(gòu):

Constrained RBAC模型結(jié)構(gòu):
靜態(tài)職責(zé)分離:
-
互斥角色:同一個(gè)用戶在兩個(gè)互斥角色中只能選擇一個(gè)
-
基數(shù)約束:一個(gè)用戶擁有的角色是有限的,一個(gè)角色擁有的許可也是有限的
-
先決條件約束:用戶想要獲得高級(jí)角色,首先必須擁有低級(jí)角色

動(dòng)態(tài)職責(zé)分離:
-
會(huì)話和角色之間的約束,可以動(dòng)態(tài)的約束用戶擁有的角色,如一個(gè)用戶可以擁有兩個(gè)角色,但是運(yùn)行時(shí)只能激活一個(gè)角色。

Symmetric RBAC模型結(jié)構(gòu):

2.2權(quán)限系統(tǒng)設(shè)計(jì)
RBAC模型如何在我們的實(shí)際場(chǎng)景中選型和改造是一件深入思考的事情。首先我們要基于我們的業(yè)務(wù)場(chǎng)景圈定權(quán)限系統(tǒng)核心功能。
我們做的是本地服務(wù)tob業(yè)務(wù),所以對(duì)于商家我們會(huì)有商家平臺(tái),除了商家的管理平臺(tái)之外,我們還需要對(duì)于o端建設(shè)平臺(tái)進(jìn)行管理,以及我們開發(fā)同學(xué)的干預(yù)平臺(tái)等,這些平臺(tái)都需要權(quán)限管控。每個(gè)系統(tǒng)都有各自的頁面,每個(gè)頁面都有自己的功能實(shí)現(xiàn),大到頁面權(quán)限的管控,小到按鈕的管控,在未來的業(yè)務(wù)發(fā)展中都是我們權(quán)限系統(tǒng)所需要考慮的。所以我們的權(quán)限管理相對(duì)來說任務(wù)也是比較繁重的。
針對(duì)我們以上的業(yè)務(wù)場(chǎng)景和需求形態(tài),我們首先敲定了權(quán)限系統(tǒng)的核心職責(zé):
-
頁面菜單權(quán)限的管控
-
功能組權(quán)限管控
-
按鈕功能權(quán)限管控
-
支持多業(yè)務(wù)線
我們基于Flat RBAC設(shè)計(jì)了如下的RBAC模型:

基于我們?cè)O(shè)計(jì)的RBAC模型,繼續(xù)細(xì)節(jié)的考量
-
支持多業(yè)務(wù)線接入和業(yè)務(wù)線業(yè)務(wù)隔離
-
需要支持菜單權(quán)限、功能組權(quán)限、按鈕權(quán)限的管控
首先考量業(yè)務(wù)線支持問題,對(duì)于這個(gè)事情我們使用了單獨(dú)的表來表達(dá)產(chǎn)品線信息,在設(shè)計(jì)user,role 和 func 表,都需要與業(yè)務(wù)線信息表關(guān)聯(lián)。
于是我們思考如何支持頁面菜單權(quán)限、功能組權(quán)限和按鈕權(quán)限的問題。
菜單權(quán)限、功能組權(quán)限和按鈕權(quán)限都隸屬于功能權(quán)限,于是我們使用一張表進(jìn)行功能權(quán)限的表達(dá),和前端頁面的樹形結(jié)構(gòu)表達(dá)相映射,構(gòu)造一個(gè)功能權(quán)限樹,于是我們最終落地的ER圖如下:

業(yè)務(wù)線
對(duì)于不同的系統(tǒng),各自的用戶體系、角色管理、權(quán)限管理都是有差異的,需要滿足不同的系統(tǒng)的訴求,首先要做的是對(duì)各個(gè)系統(tǒng)的隔離。
我們?cè)O(shè)計(jì)了業(yè)務(wù)線信息的表,核心字段如下:

該表主要描述業(yè)務(wù)線的基礎(chǔ)信息內(nèi)容,用于更好的管理和配置。
業(yè)務(wù)線隔離的實(shí)質(zhì)是用戶表、角色表和權(quán)限表都需要指定業(yè)務(wù)線的prod_id,這樣在BRAC模型的三個(gè)核心角色里都做到了業(yè)務(wù)線隔離,每個(gè)系統(tǒng)在使用自己的數(shù)據(jù)的時(shí)候都需要指定自己的prod_id。
用戶
從業(yè)務(wù)角度分析來看,商家平臺(tái)是對(duì)外面向商家登錄的用戶賬號(hào)體系,對(duì)于o端來說,是面向我們運(yùn)營(yíng)同學(xué),bd同學(xué)使用的場(chǎng)景,使用的內(nèi)部賬號(hào)體系,所以,我們這里就有這不同的用戶登錄體系。
我們面臨著多種用戶體系形態(tài),所以,我們就兼容不同的用戶體系設(shè)計(jì),由此我們?cè)O(shè)計(jì)的用戶表核心字段如下:

prod_id、user_type 和 login_id 組成聯(lián)合唯一建。
角色
FLAT BRAC模型的角色并沒有涉及角色的繼承關(guān)系,我們現(xiàn)在的業(yè)務(wù)沒有涉及到這么復(fù)雜的角色關(guān)系,所以我們用最簡(jiǎn)單的方式來表達(dá)角色信息,從而減少對(duì)于角色身份的管理和維護(hù)。
角色的核心字段如下:

prod_id 和 en_name組成聯(lián)合唯一建。
權(quán)限
權(quán)限這塊是我們思考最多的地方,我們希望可以通過統(tǒng)一的標(biāo)準(zhǔn)將前端頁面的功能權(quán)限進(jìn)行約定。
我們?nèi)チ私馇岸耸褂玫脑O(shè)計(jì),無論是b端還是o端前端,都是我們自己的前端團(tuán)隊(duì),他們講使用統(tǒng)一的前端框架和風(fēng)格進(jìn)行設(shè)計(jì),這樣對(duì)于我們得權(quán)限系統(tǒng)來說就是最好的情況,我們首先需要面對(duì)的就是這樣風(fēng)格的權(quán)限管控。
首先看下我們b端的前端頁面樣式如下:

這里左側(cè)為頁面菜單欄,右側(cè)為菜單欄對(duì)應(yīng)的頁面,里面就是涉及到的各個(gè)功能模塊。
我們這里要處理的就是:
-
菜單欄的權(quán)限管控:菜單是否展示,菜單層級(jí)結(jié)構(gòu)以及菜單設(shè)計(jì)的頁面權(quán)限內(nèi)容
-
頁面權(quán)限:頁面里涉及到的功能權(quán)限
-
功能組:頁面中某些功能模塊的功能權(quán)限
-
按鈕:按鈕的權(quán)限
于是我們準(zhǔn)備改造權(quán)限表為樹狀結(jié)構(gòu)如圖所示:

基于這樣的樹狀結(jié)構(gòu),我們就可以描述出前端的整個(gè)權(quán)限管控內(nèi)容,權(quán)限的核心字段如下:

整體的核心設(shè)計(jì)就是這樣,結(jié)合我們的微服務(wù)框架理念,我們整體的業(yè)務(wù)交互圖如下:

現(xiàn)在我們權(quán)限系統(tǒng)已經(jīng)在支持著多利熊B端平臺(tái)和O端平臺(tái)的權(quán)限管控,并正在支持小編平臺(tái),后續(xù)我們將繼續(xù)服務(wù)更多平臺(tái)的權(quán)限管控。
2.3多利熊業(yè)務(wù)應(yīng)用
基于上述權(quán)限系統(tǒng)的設(shè)計(jì),使得多利熊業(yè)務(wù)在面對(duì)龐大的人員組織架構(gòu)、復(fù)雜的業(yè)務(wù)系統(tǒng)時(shí),也能夠高效、靈活地實(shí)現(xiàn)權(quán)限的管理。
如下圖的商務(wù)運(yùn)營(yíng)系統(tǒng)應(yīng)用場(chǎng)景所示,該系統(tǒng)是面向內(nèi)部多個(gè)團(tuán)隊(duì)開放的,每個(gè)團(tuán)隊(duì)都具有不同的職能,甚至團(tuán)隊(duì)內(nèi)部也劃分了不同的崗位。

針對(duì)該應(yīng)用場(chǎng)景,系統(tǒng)權(quán)限的分配與管理主要包括以下的步驟:
1. 明確系統(tǒng)角色:如上圖3.1所示,商務(wù)運(yùn)營(yíng)系統(tǒng)包括商家、商鋪、訂單等在內(nèi)的多個(gè)平臺(tái)。針對(duì)每個(gè)平臺(tái),需要確定好平臺(tái)內(nèi)需要哪些角色,不同角色在平臺(tái)內(nèi)承擔(dān)著不同的任務(wù)。例如商戶入駐系統(tǒng)包括了幫助商戶入駐的角色、幫助商戶管理成員的角色等。
2. 明確角色權(quán)限:針對(duì)角色承擔(dān)的具體任務(wù),其對(duì)應(yīng)的系統(tǒng)可操作權(quán)限也是不同的,這就需要每一個(gè)角色分配具體的操作權(quán)限。例如幫助商戶入駐的角色,可以有錄入、查詢、修改商家信息等接口與按鈕的權(quán)限。
3. 明確團(tuán)隊(duì)架構(gòu):如上圖3.2所示,審核管理項(xiàng)目需要有商務(wù)、運(yùn)營(yíng)、客服等多個(gè)團(tuán)隊(duì),不同團(tuán)隊(duì)下還有相應(yīng)的崗位來承擔(dān)不同的任務(wù)。例如商務(wù)團(tuán)隊(duì)包括商務(wù)小編、商務(wù)管理員、商務(wù)負(fù)責(zé)人等崗位。
4. 為團(tuán)隊(duì)成員分配系統(tǒng)角色:為了將系統(tǒng)內(nèi)的角色權(quán)限與團(tuán)隊(duì)內(nèi)的組織架構(gòu)進(jìn)行結(jié)合,如上圖3.3所示,管理人員可以通過角色配置的方式,來為崗位的人員賦予對(duì)應(yīng)平臺(tái)的權(quán)限。例如商務(wù)小編只有商品管理的角色,而商務(wù)可以同時(shí)有商品管理角色、商家入駐角色等,這樣就實(shí)現(xiàn)了基于角色進(jìn)行權(quán)限管理的實(shí)際應(yīng)用。
GEEK TALK
03
權(quán)限系統(tǒng)思考
有了功能權(quán)限,我們進(jìn)而應(yīng)該思考另外一塊領(lǐng)域,就是數(shù)據(jù)權(quán)限。
數(shù)據(jù)權(quán)限,就是有或者沒有對(duì)某些數(shù)據(jù)的訪問權(quán)限,具體表現(xiàn)形式就是當(dāng)某用戶有操作權(quán)限的時(shí)候,但不代表其對(duì)所有的數(shù)據(jù)都有查看或者管理權(quán)限。數(shù)據(jù)權(quán)限有兩種表現(xiàn)形式:一種是行權(quán)限,另外一種是列權(quán)限。
所謂行權(quán)限,就是限制用戶對(duì)某些行的訪問權(quán)限,比如:只能對(duì)本人、本部門、本組織的數(shù)據(jù)進(jìn)行訪問;也可以是根據(jù)數(shù)據(jù)的范圍進(jìn)行限制,比如:合同額大小來限制用戶對(duì)數(shù)據(jù)的訪問。所謂列權(quán)限,就是限制用戶對(duì)某些列的訪問權(quán)限,比如:某些內(nèi)容的摘要可以被查閱,但是詳細(xì)內(nèi)容就只有VIP用戶才能查看。
通過數(shù)據(jù)權(quán)限,可以從物理層級(jí)限制用戶對(duì)數(shù)據(jù)的行或列進(jìn)行獲取,這種方式比把所有數(shù)據(jù)拿到之后再根據(jù)用戶權(quán)限來限制某些行或列有諸多好處。以列表數(shù)據(jù)權(quán)限為例,主要通過數(shù)據(jù)權(quán)限控制行數(shù)據(jù),讓不同的人有不同的查看數(shù)據(jù)規(guī)則;要實(shí)現(xiàn)數(shù)據(jù)權(quán)限,最重要的是需要抽象出數(shù)據(jù)規(guī)則。
但是光有數(shù)據(jù)規(guī)則是不夠的,我們還需要把數(shù)據(jù)規(guī)則跟資源和用戶進(jìn)行綁定。這樣資源就可以關(guān)聯(lián)上了數(shù)據(jù)規(guī)則。
在設(shè)計(jì)上我們需要一個(gè)單獨(dú)的數(shù)據(jù)規(guī)則管理功能,方便我們錄入數(shù)據(jù)規(guī)則,然后在資源管理頁面上就可以選擇內(nèi)置的數(shù)據(jù)規(guī)則進(jìn)行資源與規(guī)則的綁定。
那么如何讓不同的用戶擁有不同的數(shù)據(jù)規(guī)則呢?
在RBAC模型中,用戶是通過授予不同的角色來進(jìn)行資源的管理,同理我們可以讓角色在授予權(quán)限的時(shí)候關(guān)聯(lián)上數(shù)據(jù)規(guī)則,這樣最終在系統(tǒng)上就體現(xiàn)為不同的用戶擁有不同的數(shù)據(jù)規(guī)則。
基于此,我們可以基本實(shí)現(xiàn)RBAC與數(shù)據(jù)規(guī)則的綁定;同時(shí)數(shù)據(jù)權(quán)限是一個(gè)實(shí)現(xiàn)相對(duì)比較復(fù)雜的功能,除了在RBAC模型基礎(chǔ)上進(jìn)行擴(kuò)展,是否還有其他更合理的思路,留給大家進(jìn)行思考。
審核編輯 :李倩
-
架構(gòu)
+關(guān)注
關(guān)注
1文章
533瀏覽量
26597 -
權(quán)限系統(tǒng)
+關(guān)注
關(guān)注
0文章
6瀏覽量
6085
原文標(biāo)題:淺談權(quán)限系統(tǒng)在多利熊業(yè)務(wù)應(yīng)用
文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux文件權(quán)限管理詳解
廣汽埃安UT在香港維多利亞港畔正式上市
SC-3568HA:解鎖鴻蒙全權(quán)限API與分布式能力的工業(yè)控制平臺(tái)
飛凌嵌入式ElfBoard-獲取文件的狀態(tài)信息之文件權(quán)限
電能質(zhì)量在線監(jiān)測(cè)裝置的權(quán)限管理如何保障數(shù)據(jù)安全?
電能質(zhì)量在線監(jiān)測(cè)裝置支持多賬號(hào)權(quán)限管理嗎?
電能質(zhì)量在線監(jiān)測(cè)裝置的數(shù)據(jù)在云端的訪問權(quán)限是如何管控的?
技術(shù)文章 | Ubuntu權(quán)限管理攻略
Linux權(quán)限體系解析
晶科儲(chǔ)能為維多利亞州養(yǎng)老院部署860kWh儲(chǔ)能系統(tǒng)
Linux權(quán)限管理基礎(chǔ)入門
鴻蒙應(yīng)用元服務(wù)開發(fā)-Account Kit配置scope權(quán)限
高質(zhì)量 HarmonyOS 權(quán)限管控流程
淺談權(quán)限系統(tǒng)在多利熊業(yè)務(wù)應(yīng)用
評(píng)論