【轉(zhuǎn)載】B端角色權(quán)限設(shè)計(jì)參考

一龄章、令人頭疼的權(quán)限設(shè)計(jì)

設(shè)計(jì)師在進(jìn)行設(shè)計(jì)時(shí)吃谣,常常會抽象出對產(chǎn)品有訴求的多個角色乞封,再依據(jù)角色的特性去梳理使用場景并設(shè)計(jì)。

當(dāng)角色之間的使用場景不沖突岗憋,不需要隔離時(shí)肃晚,我們會綜合考慮這些角色的使用場景來設(shè)計(jì)解決方案:比如網(wǎng)易云音樂同時(shí)為需要聽歌和聽電臺的用戶提供所有的功能;

當(dāng)這些角色的使用場景完全不重疊仔戈、流程對立時(shí)关串,我們會設(shè)計(jì)完全獨(dú)立的兩套系統(tǒng),如滴滴的司機(jī)端和乘客端监徘;

但除了以上兩種情況晋修,在大多數(shù)B端產(chǎn)品中,基于流程公正性凰盔、信息安全性等因素考慮墓卦,各個角色的使用場景是部分通用,部分隔離的户敬,這時(shí)候就需要引入“權(quán)限系統(tǒng)”了落剪。

設(shè)計(jì)師有時(shí)會對角色權(quán)限系統(tǒng)有一絲畏難情緒。一方面因?yàn)榻巧珯?quán)限系統(tǒng)的配置作為一個非常后臺的管理功能尿庐,在競品調(diào)研過程中很難通過上帝視角去解剖其中邏輯忠怖,自己琢磨又較難透徹;另一方面對于角色權(quán)限系統(tǒng)抄瑟,做好了并不能代表設(shè)計(jì)能力有多優(yōu)秀脑又,但一旦沒做好就會導(dǎo)致整個流程不通、產(chǎn)品崩潰锐借。所以設(shè)計(jì)師常對權(quán)限系統(tǒng)望而卻步。

以下就筆者的幾次權(quán)限設(shè)計(jì)經(jīng)歷往衷,提供一些所謂的經(jīng)驗(yàn)套路钞翔,希望各位設(shè)計(jì)師從此微笑迎接權(quán)限需求。

?

二席舍、基于技術(shù)模型進(jìn)行設(shè)計(jì)-RBAC模型

進(jìn)行設(shè)計(jì)前布轿,最好能夠理解技術(shù)模型。在業(yè)界接受度較高的功能權(quán)限模型是RBAC(Role-Based Access Control)模型来颤,其基本理念是將“角色”這個概念賦予用戶汰扭,在系統(tǒng)中用戶與權(quán)限之間通過角色進(jìn)行關(guān)聯(lián),以這樣的方法來實(shí)現(xiàn)靈活配置福铅。以下就模型與設(shè)計(jì)相關(guān)的幾點(diǎn)做一下簡單介紹萝毛。

1. 基本的RBAC模型

如果沒有角色的概念,系統(tǒng)中每加入一個用戶滑黔,就需要為這個用戶配置一遍權(quán)限笆包,下圖是wiki中直接為用戶權(quán)限管理方式环揽,可以看出管理成本巨大。

而引入“角色”概念后庵佣,如下圖即是RBAC模型中最基本的模型:用戶與角色可為多對一或多對多的關(guān)系歉胶,當(dāng)一個用戶的角色為多對多時(shí),當(dāng)前用戶的權(quán)限是多個角色的并集巴粪。


此時(shí)只需要為角色賦予權(quán)限通今,能夠大大減輕管理負(fù)擔(dān),同時(shí)將用戶與權(quán)限解耦肛根,提供更大的靈活性辫塌。

2. 引入用戶組概念的RBAC模型

在大型平臺的應(yīng)用上,試想如果用戶量上萬晶通,新增一個角色時(shí)璃氢,可能需要為大量用戶都分配一遍新的角色,工程量仍然巨大狮辽,此時(shí)即可以引入用戶組的概念:如果部分用戶的使用場景是相對一致和基礎(chǔ)的一也,我們可以把這些用戶打包成一個組,基于這個組的對象進(jìn)行角色和權(quán)限的賦予喉脖。

同理如果權(quán)限較多時(shí)也會存在一樣的問題椰苟,處理方式是引入權(quán)限組的概念,將使用場景相對固定的一組功能或權(quán)限打包成組賦予角色树叽。但是一般來講一個系統(tǒng)中權(quán)限功能的體量是相對有限和可控的舆蝴,所以實(shí)際應(yīng)用中對權(quán)限組的使用較少。


下圖所示為mac系統(tǒng)中運(yùn)行添加用戶組题诵,并以用戶組為單位配置權(quán)限洁仗;

需要注意的是即使有用戶組或權(quán)限組的存在,也可以允許用戶或權(quán)限與角色直接關(guān)聯(lián)性锭,這個可以視具體業(yè)務(wù)情況而定赠潦。

3. 角色繼承的RBAC模型

在一個業(yè)務(wù)場景中,如果角色需區(qū)分:設(shè)計(jì)主管草冈、設(shè)計(jì)組長她奥、設(shè)計(jì)成員,并且管理方式為向下兼容時(shí)怎棱,則需使用角色繼承的RBAC模型:上層角色繼承下層角色的全部權(quán)限哩俭,且可額外賦予權(quán)限。

此時(shí)除了對角色進(jìn)行定義拳恋,還需要管理角色間的關(guān)系凡资,通過關(guān)系來體現(xiàn)角色的層級關(guān)系,從而達(dá)到繼承權(quán)限的效果诅岩。角色的繼承關(guān)系主要有兩種:樹形圖和有向無環(huán)圖:

繼承關(guān)系常常來源于公司團(tuán)隊(duì)的組織結(jié)構(gòu)讳苦,此時(shí)常將角色與組織結(jié)構(gòu)進(jìn)行關(guān)聯(lián)達(dá)到繼承角色模型的效果带膜;如下圖所示的趙同學(xué),其角色是“三級團(tuán)隊(duì)負(fù)責(zé)人”鸳谜,與其并列的小組中有多個“三級團(tuán)隊(duì)負(fù)責(zé)人”的角色膝藕,但依附于左側(cè)的組織結(jié)構(gòu)樹,各級負(fù)責(zé)人僅有查看和操作自己下屬子節(jié)點(diǎn)的權(quán)限咐扭。

4. 限制的RBAC模型

在一個產(chǎn)品或系統(tǒng)中芭挽,部分角色可能是需要隔離的、不允許被同時(shí)賦予一個人的蝗肪。跟大家熟知的“不能既是‘運(yùn)動員’又是‘裁判員’ ”一個道理袜爪。

因此,對于眾多角色中的一組薛闪,只能是單選的關(guān)系辛馆,但多組角色之間可以共同存在。如下圖中豁延,一個用戶可以既為設(shè)計(jì)師又為管理員昙篙,但在設(shè)計(jì)師角色組中僅能被賦予一個角色,在管理員角色組中也僅能被賦予一個角色诱咏。

此外苔可,限制還有可能是數(shù)量上的,比如一個產(chǎn)品組中必須有且只有一個管理員袋狞,不允許刪除或再分配管理員角色焚辅,僅允許將負(fù)責(zé)人角色變更。

限制的模型不僅僅對分配過程產(chǎn)生影響苟鸯,有時(shí)即使擁有了多種角色同蜻,因?yàn)椴煌慕巧珜ν粋€功能的使用方式或數(shù)據(jù)會產(chǎn)生沖突,所以使用時(shí)也需要進(jìn)行限制早处。如下圖所示為同一時(shí)間僅允許以一個身份登錄埃仪。

根據(jù)不同的業(yè)務(wù)需求,限制的形式很多陕赃。需要注意的是不能僅依賴后端限制,而是要在前端展示清晰的規(guī)則和恰當(dāng)?shù)南拗瓢涔桑苊庥脩舫鲥e和沮喪么库。

?

三、權(quán)限的拆分與設(shè)計(jì)


通過RBAC模型已經(jīng)能夠很好的搭建起用戶甘有、角色與權(quán)限之間的關(guān)系了诉儒。但具體是什么樣的關(guān)系,以及“權(quán)限”這個抽象的概念具體如何規(guī)劃亏掀?這些都需要分析清楚才能進(jìn)一步設(shè)計(jì)出完善的權(quán)限系統(tǒng)忱反。

首先需要知道泛释,一般產(chǎn)品的權(quán)限由頁面、操作和數(shù)據(jù)構(gòu)成温算。頁面與操作相互關(guān)聯(lián)怜校,必須擁有頁面權(quán)限,才能分配該頁面下對應(yīng)的操作權(quán)限注竿。數(shù)據(jù)可被增刪改查茄茁。整體關(guān)系如下圖所示:

因此,在設(shè)計(jì)之初我們就需要考慮到未來可能區(qū)分角色的地方巩割,盡量解耦裙顽、模塊化。對于技術(shù)來說宣谈,每一個頁面模塊愈犹、每一個操作都最好使用獨(dú)立的接口。對于設(shè)計(jì)來說闻丑,需要保障所有角色因?yàn)闄?quán)限而屏蔽掉部分操作和數(shù)據(jù)后漩怎,頁面和流程仍能體驗(yàn)流暢。

保證初期設(shè)計(jì)支持后梆掸,配置權(quán)限時(shí)扬卷,還需要注意以下幾點(diǎn):

1. 確定是否支持前端配置

如果角色和權(quán)限相對固定,則一般將角色與權(quán)限的關(guān)系可以寫在后臺酸钦,改動時(shí)需要后端變更且重新上線怪得;這種情況適用于公司內(nèi)部系統(tǒng)等只有一個使用主體的系統(tǒng)。

如果需要自定義角色卑硫、或者每個角色在不同使用者的場景下有不同的權(quán)限徒恋,則需要將角色的定義、角色與權(quán)限之間的配置體現(xiàn)在“前端用戶配置頁面”欢伏;這種情況適用于有頻繁變動的自定義角色權(quán)限入挣,和有租戶體系的系統(tǒng)。

2. 以基本單元拆分硝拧,以業(yè)務(wù)邏輯配置

一般可將每個對象的“增径筏、刪、改障陶、查”各自作為一個基本的權(quán)限單元滋恬。打個比方,在“人員管理”中抱究,查看人員列表恢氯、添加人員、刪除人員、編輯人員信息最好拆分為4個權(quán)限單元勋拟。在技術(shù)和設(shè)計(jì)上勋磕,我們希望能盡量做到解耦和模塊化。

但是在業(yè)務(wù)層面有些操作卻是一體的敢靡。這些不能拆開的權(quán)限在“前端用戶配置頁面”中建議打包成一個整體提供配置挂滓。例如,如果我們確定在系統(tǒng)的現(xiàn)有和未來業(yè)務(wù)中醋安,僅分為普通成員有“人員管理”的查看權(quán)限杂彭,管理員有操作權(quán)限,則可將“增吓揪、刪崎弃、改”三個基本權(quán)限單位合并為“操作”權(quán)限進(jìn)行配置膳叨。

3. 頁面權(quán)限優(yōu)先于操作和數(shù)據(jù)權(quán)限

必須配置了頁面模塊權(quán)限后唾琼,才能配置當(dāng)前頁面模塊下具體的操作權(quán)限走触,以及頁面模塊的數(shù)據(jù)展示權(quán)限;

4. 查看權(quán)限優(yōu)先于增刪改權(quán)限

正常情況下叭首,一定要先能查看某個模塊或操作习勤,其它的增刪改操作才有意義。因此在設(shè)計(jì)時(shí)焙格,應(yīng)在獲取查看權(quán)限前限制其它權(quán)限的配置图毕;或者配置其它權(quán)限時(shí)默認(rèn)賦予查看權(quán)限。


5. 角色與權(quán)限的多種關(guān)系

角色與權(quán)限的關(guān)系不僅是單純“是/否關(guān)系”眷唉,還包括以某種限制進(jìn)行操作予颤,和以某種程度訪問數(shù)據(jù)。例如在“人員管理”中:

數(shù)據(jù)范圍:用戶擁有查看人員列表的權(quán)限冬阳,但僅能查看自己所在的團(tuán)隊(duì)蛤虐;

數(shù)據(jù)邊界限制(上限等):添加人員時(shí)不能超過20個等。

數(shù)據(jù)字段:HR能查看人員列表中包括職級肝陪、薪資等字段驳庭;其它角色僅能查看姓名郵箱等字段;

6. 角色與權(quán)限的設(shè)計(jì)表達(dá)

在傳達(dá)一個系統(tǒng)的權(quán)限設(shè)計(jì)規(guī)則時(shí)氯窍,設(shè)計(jì)師常常習(xí)慣用主觀最直接的方式表達(dá)想法饲常,如用“當(dāng)……時(shí),就……”的句式來表達(dá)狼讨。但一個平臺中涉及的權(quán)限規(guī)則是非常多的不皆,當(dāng)通篇以這樣的形式描述時(shí),表達(dá)對象將很難理解熊楼。

正確的描述方式:更清晰的是基于開發(fā)的語言,和技術(shù)模型的結(jié)果進(jìn)行表達(dá):將各角色與權(quán)限單元繪制成網(wǎng)格,每個交叉點(diǎn)網(wǎng)格中描述該角色與權(quán)限的數(shù)據(jù)關(guān)系和限制鲫骗。如下圖所示:

?

四犬耻、需要注意的Tips

1. 隱形的admin

在可自定義角色和權(quán)限的系統(tǒng)中,一般需要預(yù)留一個admin角色來進(jìn)行系統(tǒng)的初始配置执泰,用于添加首批的業(yè)務(wù)人員和配置基本的角色枕磁。

有的系統(tǒng)中允許存在上帝視角的admin角色,則其可以作為“超級管理員”顯示在角色配置的列表中术吝;有的系統(tǒng)中不允許這種角色存在计济,則可將這種角色設(shè)置為隱形的狀態(tài),僅賦予維護(hù)系統(tǒng)的工作人員排苍。


2. 初始權(quán)限的賦予

對于允許用戶自行加入的系統(tǒng)沦寂,需要設(shè)定一至多個默認(rèn)的角色,有時(shí)可以是僅有最基礎(chǔ)權(quán)限的“游客”角色淘衙。

初始權(quán)限還可以與用戶既有的某些數(shù)據(jù)字段進(jìn)行關(guān)聯(lián)传藏。如添加用戶時(shí)獲取到用戶的崗位為“設(shè)計(jì)師”,則直接賦予“設(shè)計(jì)師”角色的權(quán)限彤守。


3. 人員管理中對自己的處理

在人員管理中毯侦,管理員角色處理自己時(shí)需要額外注意:因?yàn)槿绻薷幕騽h除了自己角色后,可能導(dǎo)致系統(tǒng)沒有管理角色具垫,從而無法添加其他成員和正常運(yùn)行侈离。設(shè)計(jì)時(shí)可添加判斷,當(dāng)自己為唯一管理角色時(shí)筝蚕,禁止編輯和刪除卦碾。

4. 無頁面權(quán)限的提示

雖然可以通過頁面權(quán)限限制直接隱藏當(dāng)前用戶沒有權(quán)限的頁面,但不能排除用戶獲取到權(quán)限外的url地址饰及。當(dāng)用戶意外訪問到?jīng)]有權(quán)限的頁面時(shí)務(wù)必提供“無權(quán)限”的提示蔗坯,避免用戶認(rèn)為系統(tǒng)bug。

?

最后

總結(jié)一下燎含,整個權(quán)限系統(tǒng)設(shè)計(jì)就是定義各個節(jié)點(diǎn)和節(jié)點(diǎn)間關(guān)系的過程宾濒。

節(jié)點(diǎn)包括:

用戶

用戶組

角色

角色組

權(quán)限(頁面、操作屏箍、數(shù)據(jù))

權(quán)限組(頁面绘梦、操作、數(shù)據(jù))

關(guān)系包括:

是/否關(guān)系

繼承關(guān)系

限制關(guān)系(互斥赴魁、范圍限制卸奉、邊界限制、字段限制……)

……

梳理清楚所有邏輯后颖御,通過靈活定義節(jié)點(diǎn)和組合各節(jié)點(diǎn)之間的關(guān)榄棵,便能夠輕松完成角色權(quán)限設(shè)計(jì)的100種解法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疹鳄,隨后出現(xiàn)的幾起案子拧略,更是在濱河造成了極大的恐慌,老刑警劉巖瘪弓,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垫蛆,死亡現(xiàn)場離奇詭異,居然都是意外死亡腺怯,警方通過查閱死者的電腦和手機(jī)袱饭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呛占,“玉大人虑乖,你說我怎么就攤上這事∷ㄆ保” “怎么了决左?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長走贪。 經(jīng)常有香客問我佛猛,道長,這世上最難降的妖魔是什么坠狡? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任继找,我火速辦了婚禮,結(jié)果婚禮上逃沿,老公的妹妹穿的比我還像新娘婴渡。我一直安慰自己,他們只是感情好凯亮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布边臼。 她就那樣靜靜地躺著,像睡著了一般假消。 火紅的嫁衣襯著肌膚如雪柠并。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天富拗,我揣著相機(jī)與錄音臼予,去河邊找鬼。 笑死啃沪,一個胖子當(dāng)著我的面吹牛粘拾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播创千,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼缰雇,長吁一口氣:“原來是場噩夢啊……” “哼入偷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起械哟,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盯串,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戒良,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冠摄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年糯崎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片河泳。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡沃呢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拆挥,到底是詐尸還是另有隱情薄霜,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布纸兔,位于F島的核電站惰瓜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汉矿。R本人自食惡果不足惜崎坊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洲拇。 院中可真熱鬧奈揍,春花似錦、人聲如沸赋续。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纽乱。三九已至蛾绎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迫淹,已是汗流浹背秘通。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敛熬,地道東北人肺稀。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像应民,于是被迫代替她去往敵國和親话原。 傳聞我的和親對象是個殘疾皇子夕吻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容