本文首先引入多利熊業(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ì),最后對權(quán)限系統(tǒng)設(shè)計(jì)思考,對數(shù)據(jù)維度建設(shè)拋磚引玉,讓大家一起思考解決方案。
GEEK TALK
01
業(yè)務(wù)介紹
多利熊,是百度旗下的本地生活服務(wù)平臺。多利熊旨在為用戶提供特低價優(yōu)惠的品質(zhì)服務(wù),基于百度的AI和雙引擎能力,以改變市場格局之勢迅速推進(jìn),為本地商家提供豐富的營銷渠道,決心成為本地生活市場的重塑性力量。
多利熊覆蓋餐飲、酒店、景區(qū)、休閑娛樂、麗人等眾多品類。用戶可以花更少的錢享受多利熊甄選的本地生活品質(zhì)服務(wù)。成為多利熊分銷達(dá)人,自購更省錢,分享直賣可賺取傭金,鎖粉政策可讓達(dá)人長期賺取用戶自行下單傭金,發(fā)展下游達(dá)人組建團(tuán)隊(duì)更可賺取團(tuán)隊(duì)傭金。
多利熊架構(gòu)是如何支撐起整個業(yè)務(wù)生態(tài)運(yùn)轉(zhuǎn),如下圖所示:
如圖所示,多利熊整個業(yè)務(wù)架構(gòu)分位三層。包括:生態(tài)場景層、平臺支撐層、基礎(chǔ)建設(shè)層。
-
多利熊生態(tài)場景:多利熊除了在百度的雙引擎、百家號、私域中進(jìn)行分發(fā)外,還擴(kuò)展到了微信生態(tài)圈,建設(shè)了多利熊微信小程序,用于在微信生態(tài)的分發(fā),通過微信群、微信分享、微信達(dá)人引流。除了自建外,也通過合作方式引入第三方服務(wù)商、自研商家、本地生活服務(wù)平臺,從而打造多元化、多類型的本地生活服務(wù)生態(tài)圈。
-
多利熊平臺支撐:多利熊建設(shè)了大量平臺,包括:商戶平臺、運(yùn)營平臺、審核平臺、小編平臺、分發(fā)平臺、干預(yù)平臺、質(zhì)量平臺等等。通過豐富的平臺,降低運(yùn)營成本、提升商家接入效率,從而更好的支撐業(yè)務(wù)的高速發(fā)展,快速迭代。
-
多利熊基礎(chǔ)建設(shè):多利熊的基礎(chǔ)建設(shè)層,通過集成小程序及百度中臺的眾多沉淀系統(tǒng),迅速支撐業(yè)務(wù)快速迭代。包括:小程序自研的服務(wù)化治理方案:天路、天眼、BRCC;小程序沉淀的數(shù)據(jù)多維度分析報表和穩(wěn)定性建設(shè)監(jiān)控和治理手段;以及百度豐富的中臺系統(tǒng):交易中臺、營銷中臺、互動中臺、審核中臺等等。
從圖中可以看到,整個多利熊業(yè)務(wù)架構(gòu)中,平臺角色眾多,權(quán)限系統(tǒng)面臨非常多的挑戰(zhàn)。
-
平臺眾多,各個平臺的賬號系統(tǒng)也會存在差異性。權(quán)限系統(tǒng)如何支持各平臺的隔離設(shè)置,保證平臺數(shù)據(jù)的合規(guī)性和安全性?
-
多個平臺中存在眾多業(yè)務(wù)角色、角色存在上下級關(guān)系,大家需要協(xié)同工作。權(quán)限系統(tǒng)如何支持高效的配置,保障多角色協(xié)同、高效、便利操作?
-
多個平臺基于不同語言開發(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)限。這就極大地簡化了權(quán)限的管理。在一個組織中,角色是為了完成各種工作而創(chuàng)造,用戶則依據(jù)它的責(zé)任和資格來被指派相應(yīng)的角色,用戶可以很容易地從一個角色被指派到另一個角色。角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限,而權(quán)限也可根據(jù)需要而從某角色中回收。角色與角色的關(guān)系可以建立起來以囊括更廣泛的客觀情況。
RBAC四個核心組成部分:
-
S(Subject):主體,一名使用者或自動代理人
-
R(Role):角色信息,被定義為一個授權(quán)等級的工作職位或職稱
-
SE(Session):會話級別的身份權(quán)限表達(dá),S,R或P之間的映射關(guān)系
-
P(Permissions):權(quán)限,一種存取資源的方式
RBAC 定義了三個主要規(guī)則:
-
角色分配:只有當(dāng)主體選擇或分配了角色時,主體才能行使權(quán)限
-
角色授權(quán):主體的活動角色必須為主體授權(quán)。使用上面的規(guī)則 1,此規(guī)則確保用戶只能承擔(dān)他們被授權(quán)的角色
-
權(quán)限授權(quán):只有為主體的活動角色授權(quán)了權(quán)限,主體才能行使權(quán)限。對于規(guī)則 1 和 2,此規(guī)則確保用戶只能行使他們被授權(quán)的權(quán)限
RBAC的四個模型:
-
Flat RBAC:基本的 RBAC 模型,基本的概念是 用戶被分配給角色,權(quán)限也被分配給角色,用戶通過角色獲取對應(yīng)的權(quán)限
-
Hierarchical RBAC:角色被組織成分層結(jié)構(gòu),其中“較高”層級的角色從的“較低”層級的角色繼承所有權(quán)限
-
Constrained RBAC:向角色添加職責(zé)分離 (SOD) 的實(shí)施
-
Symmetric RBAC:添加了權(quán)限角色審查的要求,類似于 Flat RBAC 中描述的用戶角色審查
四種模型的等級和功能描述:
Flat RBAC模型結(jié)構(gòu):
Hierarchical RBAC模型結(jié)構(gòu):
Constrained RBAC模型結(jié)構(gòu):
靜態(tài)職責(zé)分離:
-
互斥角色:同一個用戶在兩個互斥角色中只能選擇一個
-
基數(shù)約束:一個用戶擁有的角色是有限的,一個角色擁有的許可也是有限的
-
先決條件約束:用戶想要獲得高級角色,首先必須擁有低級角色
動態(tài)職責(zé)分離:
-
會話和角色之間的約束,可以動態(tài)的約束用戶擁有的角色,如一個用戶可以擁有兩個角色,但是運(yùn)行時只能激活一個角色。
Symmetric RBAC模型結(jié)構(gòu):
2.2權(quán)限系統(tǒng)設(shè)計(jì)
RBAC模型如何在我們的實(shí)際場景中選型和改造是一件深入思考的事情。首先我們要基于我們的業(yè)務(wù)場景圈定權(quán)限系統(tǒng)核心功能。
我們做的是本地服務(wù)tob業(yè)務(wù),所以對于商家我們會有商家平臺,除了商家的管理平臺之外,我們還需要對于o端建設(shè)平臺進(jìn)行管理,以及我們開發(fā)同學(xué)的干預(yù)平臺等,這些平臺都需要權(quán)限管控。每個系統(tǒng)都有各自的頁面,每個頁面都有自己的功能實(shí)現(xiàn),大到頁面權(quán)限的管控,小到按鈕的管控,在未來的業(yè)務(wù)發(fā)展中都是我們權(quán)限系統(tǒng)所需要考慮的。所以我們的權(quán)限管理相對來說任務(wù)也是比較繁重的。
針對我們以上的業(yè)務(wù)場景和需求形態(tài),我們首先敲定了權(quán)限系統(tǒng)的核心職責(zé):
-
頁面菜單權(quán)限的管控
-
功能組權(quán)限管控
-
按鈕功能權(quán)限管控
-
支持多業(yè)務(wù)線
我們基于Flat RBAC設(shè)計(jì)了如下的RBAC模型:
基于我們設(shè)計(jì)的RBAC模型,繼續(xù)細(xì)節(jié)的考量
-
支持多業(yè)務(wù)線接入和業(yè)務(wù)線業(yè)務(wù)隔離
-
需要支持菜單權(quán)限、功能組權(quán)限、按鈕權(quán)限的管控
首先考量業(yè)務(wù)線支持問題,對于這個事情我們使用了單獨(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)造一個功能權(quán)限樹,于是我們最終落地的ER圖如下:
業(yè)務(wù)線
對于不同的系統(tǒng),各自的用戶體系、角色管理、權(quán)限管理都是有差異的,需要滿足不同的系統(tǒng)的訴求,首先要做的是對各個系統(tǒng)的隔離。
我們設(shè)計(jì)了業(yè)務(wù)線信息的表,核心字段如下:
該表主要描述業(yè)務(wù)線的基礎(chǔ)信息內(nèi)容,用于更好的管理和配置。
業(yè)務(wù)線隔離的實(shí)質(zhì)是用戶表、角色表和權(quán)限表都需要指定業(yè)務(wù)線的prod_id,這樣在BRAC模型的三個核心角色里都做到了業(yè)務(wù)線隔離,每個系統(tǒng)在使用自己的數(shù)據(jù)的時候都需要指定自己的prod_id。
用戶
從業(yè)務(wù)角度分析來看,商家平臺是對外面向商家登錄的用戶賬號體系,對于o端來說,是面向我們運(yùn)營同學(xué),bd同學(xué)使用的場景,使用的內(nèi)部賬號體系,所以,我們這里就有這不同的用戶登錄體系。
我們面臨著多種用戶體系形態(tài),所以,我們就兼容不同的用戶體系設(shè)計(jì),由此我們設(shè)計(jì)的用戶表核心字段如下:
prod_id、user_type 和 login_id 組成聯(lián)合唯一建。
角色
FLAT BRAC模型的角色并沒有涉及角色的繼承關(guān)系,我們現(xiàn)在的業(yè)務(wù)沒有涉及到這么復(fù)雜的角色關(guān)系,所以我們用最簡單的方式來表達(dá)角色信息,從而減少對于角色身份的管理和維護(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ì),這樣對于我們得權(quán)限系統(tǒng)來說就是最好的情況,我們首先需要面對的就是這樣風(fēng)格的權(quán)限管控。
首先看下我們b端的前端頁面樣式如下:
這里左側(cè)為頁面菜單欄,右側(cè)為菜單欄對應(yīng)的頁面,里面就是涉及到的各個功能模塊。
我們這里要處理的就是:
-
菜單欄的權(quán)限管控:菜單是否展示,菜單層級結(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),我們就可以描述出前端的整個權(quán)限管控內(nèi)容,權(quán)限的核心字段如下:
整體的核心設(shè)計(jì)就是這樣,結(jié)合我們的微服務(wù)框架理念,我們整體的業(yè)務(wù)交互圖如下:
現(xiàn)在我們權(quán)限系統(tǒng)已經(jīng)在支持著多利熊B端平臺和O端平臺的權(quán)限管控,并正在支持小編平臺,后續(xù)我們將繼續(xù)服務(wù)更多平臺的權(quán)限管控。
2.3多利熊業(yè)務(wù)應(yīng)用
基于上述權(quán)限系統(tǒng)的設(shè)計(jì),使得多利熊業(yè)務(wù)在面對龐大的人員組織架構(gòu)、復(fù)雜的業(yè)務(wù)系統(tǒng)時,也能夠高效、靈活地實(shí)現(xiàn)權(quán)限的管理。
如下圖的商務(wù)運(yùn)營系統(tǒng)應(yīng)用場景所示,該系統(tǒng)是面向內(nèi)部多個團(tuán)隊(duì)開放的,每個團(tuán)隊(duì)都具有不同的職能,甚至團(tuán)隊(duì)內(nèi)部也劃分了不同的崗位。
針對該應(yīng)用場景,系統(tǒng)權(quán)限的分配與管理主要包括以下的步驟:
1. 明確系統(tǒng)角色:如上圖3.1所示,商務(wù)運(yùn)營系統(tǒng)包括商家、商鋪、訂單等在內(nèi)的多個平臺。針對每個平臺,需要確定好平臺內(nèi)需要哪些角色,不同角色在平臺內(nèi)承擔(dān)著不同的任務(wù)。例如商戶入駐系統(tǒng)包括了幫助商戶入駐的角色、幫助商戶管理成員的角色等。
2. 明確角色權(quán)限:針對角色承擔(dān)的具體任務(wù),其對應(yīng)的系統(tǒng)可操作權(quán)限也是不同的,這就需要每一個角色分配具體的操作權(quán)限。例如幫助商戶入駐的角色,可以有錄入、查詢、修改商家信息等接口與按鈕的權(quán)限。
3. 明確團(tuán)隊(duì)架構(gòu):如上圖3.2所示,審核管理項(xiàng)目需要有商務(wù)、運(yùn)營、客服等多個團(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所示,管理人員可以通過角色配置的方式,來為崗位的人員賦予對應(yīng)平臺的權(quán)限。例如商務(wù)小編只有商品管理的角色,而商務(wù)可以同時有商品管理角色、商家入駐角色等,這樣就實(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)限,就是有或者沒有對某些數(shù)據(jù)的訪問權(quán)限,具體表現(xiàn)形式就是當(dāng)某用戶有操作權(quán)限的時候,但不代表其對所有的數(shù)據(jù)都有查看或者管理權(quán)限。數(shù)據(jù)權(quán)限有兩種表現(xiàn)形式:一種是行權(quán)限,另外一種是列權(quán)限。
所謂行權(quán)限,就是限制用戶對某些行的訪問權(quán)限,比如:只能對本人、本部門、本組織的數(shù)據(jù)進(jìn)行訪問;也可以是根據(jù)數(shù)據(jù)的范圍進(jìn)行限制,比如:合同額大小來限制用戶對數(shù)據(jù)的訪問。所謂列權(quán)限,就是限制用戶對某些列的訪問權(quán)限,比如:某些內(nèi)容的摘要可以被查閱,但是詳細(xì)內(nèi)容就只有VIP用戶才能查看。
通過數(shù)據(jù)權(quán)限,可以從物理層級限制用戶對數(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ì)上我們需要一個單獨(dú)的數(shù)據(jù)規(guī)則管理功能,方便我們錄入數(shù)據(jù)規(guī)則,然后在資源管理頁面上就可以選擇內(nèi)置的數(shù)據(jù)規(guī)則進(jìn)行資源與規(guī)則的綁定。
那么如何讓不同的用戶擁有不同的數(shù)據(jù)規(guī)則呢?
在RBAC模型中,用戶是通過授予不同的角色來進(jìn)行資源的管理,同理我們可以讓角色在授予權(quán)限的時候關(guān)聯(lián)上數(shù)據(jù)規(guī)則,這樣最終在系統(tǒng)上就體現(xiàn)為不同的用戶擁有不同的數(shù)據(jù)規(guī)則。
基于此,我們可以基本實(shí)現(xiàn)RBAC與數(shù)據(jù)規(guī)則的綁定;同時數(shù)據(jù)權(quán)限是一個實(shí)現(xiàn)相對比較復(fù)雜的功能,除了在RBAC模型基礎(chǔ)上進(jìn)行擴(kuò)展,是否還有其他更合理的思路,留給大家進(jìn)行思考。
審核編輯 :李倩
-
架構(gòu)
+關(guān)注
關(guān)注
1文章
528瀏覽量
25985 -
權(quán)限系統(tǒng)
+關(guān)注
關(guān)注
0文章
6瀏覽量
6021
原文標(biāo)題:淺談權(quán)限系統(tǒng)在多利熊業(yè)務(wù)應(yīng)用
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
晶科儲能為維多利亞州養(yǎng)老院部署860kWh儲能系統(tǒng)
Linux權(quán)限管理基礎(chǔ)入門

鴻蒙應(yīng)用元服務(wù)開發(fā)-Account Kit配置scope權(quán)限
高質(zhì)量 HarmonyOS 權(quán)限管控流程

設(shè)備管理系統(tǒng)新范式:區(qū)塊鏈存證+動態(tài)權(quán)限管理

淺談直流有刷電機(jī)驅(qū)動及調(diào)速技術(shù)
linux權(quán)限管理詳解
搞懂Linux權(quán)限管理,提升系統(tǒng)安全性與穩(wěn)定性

華納云:設(shè)置RBAC權(quán)限的方法
Linux用戶身份與進(jìn)程權(quán)限詳解

瑞芯微RK3568鴻蒙開發(fā)板OpenHarmony系統(tǒng)修改cfg文件權(quán)限方法

評論