角色權限設計的100種解法
以下作者結合自己的幾次權限設計經歷,提供一些所謂的經驗套路,希望各位設計師從此微笑迎接權限需求。
一、令人頭疼的權限設計
設計師在進行設計時,常常會抽象出對產品有訴求的多個角色,再依據(jù)角色的特性去梳理使用場景并設計。
當角色之間的使用場景不沖突,不需要隔離時,我們會綜合考慮這些角色的使用場景來設計解決方案。比如:網(wǎng)易云音樂同時為需要聽歌和聽電臺的用戶,提供所有的功能。
當這些角色的使用場景完全不重疊、流程對立時,我們會設計完全獨立的兩套系統(tǒng),如滴滴的司機端和乘客端;
但除了以上兩種情況,在大多數(shù)B端產品中,基于流程公正性、信息安全性等因素考慮,各個角色的使用場景是部分通用,部分隔離的,這時候就需要引入“權限系統(tǒng)”了。
設計師有時會對角色權限系統(tǒng)有一絲畏難情緒。
- 一方面因為角色權限系統(tǒng)的配置作為一個非常后臺的管理功能,在競品調研過程中很難通過上帝視角去解剖其中邏輯,自己琢磨又較難透徹;
- 另一方面對于角色權限系統(tǒng),做好了并不能代表設計能力有多優(yōu)秀,但一旦沒做好就會導致整個流程不通、產品崩潰。所以設計師常對權限系統(tǒng)望而卻步。
以下就筆者的幾次權限設計經歷,提供一些所謂的經驗套路,希望各位設計師從此微笑迎接權限需求。
二、基于技術模型進行設計-RBAC模型
進行設計前,最好能夠理解技術模型。在業(yè)界接受度較高的功能權限模型是RBAC(Role-Based Access Control)模型,其基本理念是將“角色”這個概念賦予用戶,在系統(tǒng)中用戶與權限之間通過角色進行關聯(lián),以這樣的方法來實現(xiàn)靈活配置。以下就模型與設計相關的幾點做一下簡單介紹。
1. 基本的RBAC模型
如果沒有角色的概念,系統(tǒng)中每加入一個用戶,就需要為這個用戶配置一遍權限,下圖是wiki中直接為用戶權限管理方式,可以看出管理成本巨大。
而引入“角色”概念后,如下圖即是RBAC模型中最基本的模型:用戶與角色可為多對一或多對多的關系,當一個用戶的角色為多對多時,當前用戶的權限是多個角色的并集。
此時只需要為角色賦予權限,能夠大大減輕管理負擔,同時將用戶與權限解耦,提供更大的靈活性。
2. 引入用戶組概念的RBAC模型
在大型平臺的應用上,試想如果用戶量上萬,新增一個角色時,可能需要為大量用戶都分配一遍新的角色,工程量仍然巨大,此時即可以引入用戶組的概念。如果部分用戶的使用場景是相對一致和基礎的,我們可以把這些用戶打包成一個組,基于這個組的對象進行角色和權限的賦予。
同理如果權限較多時也會存在一樣的問題,處理方式是引入權限組的概念,將使用場景相對固定的一組功能或權限打包成組賦予角色。但是一般來講一個系統(tǒng)中權限功能的體量是相對有限和可控的,所以實際應用中對權限組的使用較少。
下圖所示為mac系統(tǒng)中運行添加用戶組,并以用戶組為單位配置權限。
需要注意的是即使有用戶組或權限組的存在,也可以允許用戶或權限與角色直接關聯(lián),這個可以視具體業(yè)務情況而定。
3. 角色繼承的RBAC模型
在一個業(yè)務場景中,如果角色需區(qū)分:設計主管、設計組長、設計成員,并且管理方式為向下兼容時,則需使用角色繼承的RBAC模型。上層角色繼承下層角色的全部權限,且可額外賦予權限。
此時除了對角色進行定義,還需要管理角色間的關系,通過關系來體現(xiàn)角色的層級關系,從而達到繼承權限的效果。角色的繼承關系主要有兩種:樹形圖和有向無環(huán)圖。
繼承關系常常來源于公司團隊的組織結構,此時常將角色與組織結構進行關聯(lián)達到繼承角色模型的效果。如下圖所示的趙同學,其角色是“三級團隊負責人”,與其并列的小組中有多個“三級團隊負責人”的角色,但依附于左側的組織結構樹,各級負責人僅有查看和操作自己下屬子節(jié)點的權限。
4. 限制的RBAC模型
在一個產品或系統(tǒng)中,部分角色可能是需要隔離的、不允許被同時賦予一個人的。跟大家熟知的“不能既是‘運動員’又是‘裁判員’ ”一個道理。
因此,對于眾多角色中的一組,只能是單選的關系,但多組角色之間可以共同存在。如下圖中,一個用戶可以既為設計師又為管理員,但在設計師角色組中僅能被賦予一個角色,在管理員角色組中也僅能被賦予一個角色。
此外,限制還有可能是數(shù)量上的,比如一個產品組中必須有且只有一個管理員,不允許刪除或再分配管理員角色,僅允許將負責人角色變更。
限制的模型不僅僅對分配過程產生影響,有時即使擁有了多種角色,因為不同的角色對同一個功能的使用方式或數(shù)據(jù)會產生沖突,所以使用時也需要進行限制。如下圖所示為同一時間僅允許以一個身份登錄。
根據(jù)不同的業(yè)務需求,限制的形式很多。需要注意的是不能僅依賴后端限制,而是要在前端展示清晰的規(guī)則和恰當?shù)南拗?,避免用戶出錯和沮喪。
三、權限的拆分與設計
通過RBAC模型已經能夠很好的搭建起用戶、角色與權限之間的關系了。但具體是什么樣的關系,以及“權限”這個抽象的概念具體如何規(guī)劃?
這些都需要分析清楚才能進一步設計出完善的權限系統(tǒng)。
首先需要知道,一般產品的權限由頁面、操作和數(shù)據(jù)構成。頁面與操作相互關聯(lián),必須擁有頁面權限,才能分配該頁面下對應的操作權限。數(shù)據(jù)可被增刪改查。
整體關系如下圖所示:
因此,在設計之初我們就需要考慮到未來可能區(qū)分角色的地方,盡量解耦、模塊化。對于技術來說,每一個頁面模塊、每一個操作都最好使用獨立的接口。對于設計來說,需要保障所有角色因為權限而屏蔽掉部分操作和數(shù)據(jù)后,頁面和流程仍能體驗流暢。
保證初期設計支持后,配置權限時,還需要注意以下幾點:
(1)確定是否支持前端配置
如果角色和權限相對固定,則一般將角色與權限的關系可以寫在后臺,改動時需要后端變更且重新上線。這種情況適用于公司內部系統(tǒng)等只有一個使用主體的系統(tǒng)。
如果需要自定義角色或者每個角色在不同使用者的場景下有不同的權限,則需要將角色的定義、角色與權限之間的配置體現(xiàn)在“前端用戶配置頁面”。這種情況適用于有頻繁變動的自定義角色權限,和有租戶體系的系統(tǒng)。
(2)以基本單元拆分,以業(yè)務邏輯配置
一般可將每個對象的“增、刪、改、查”各自作為一個基本的權限單元。打個比方,在“人員管理”中,查看人員列表、添加人員、刪除人員、編輯人員信息最好拆分為4個權限單元。在技術和設計上,我們希望能盡量做到解耦和模塊化。
但是在業(yè)務層面有些操作卻是一體的。這些不能拆開的權限在“前端用戶配置頁面”中建議打包成一個整體提供配置。例如:如果我們確定在系統(tǒng)的現(xiàn)有和未來業(yè)務中,僅分為普通成員有“人員管理”的查看權限,管理員有操作權限,則可將“增、刪、改”三個基本權限單位合并為“操作”權限進行配置。
(3)頁面權限優(yōu)先于操作和數(shù)據(jù)權限
必須配置了頁面模塊權限后,才能配置當前頁面模塊下具體的操作權限,以及頁面模塊的數(shù)據(jù)展示權限。
(4)查看權限優(yōu)先于增刪改權限
正常情況下,一定要先能查看某個模塊或操作,其它的增刪改操作才有意義。因此在設計時,應在獲取查看權限前限制其它權限的配置,或者配置其它權限時默認賦予查看權限。
(5)角色與權限的多種關系
角色與權限的關系不僅是單純“是/否關系”,還包括以某種限制進行操作,和以某種程度訪問數(shù)據(jù)。
例如在“人員管理”中:
- 數(shù)據(jù)范圍:用戶擁有查看人員列表的權限,但僅能查看自己所在的團隊;
- 數(shù)據(jù)邊界限制(上限等):添加人員時不能超過20個等。
- 數(shù)據(jù)字段:HR能查看人員列表中包括職級、薪資等字段,其它角色僅能查看姓名郵箱等字段;
(6)角色與權限的設計表達
在傳達一個系統(tǒng)的權限設計規(guī)則時,設計師常常習慣用主觀最直接的方式表達想法,如用“當……時,就……”的句式來表達。但一個平臺中涉及的權限規(guī)則是非常多的,當通篇以這樣的形式描述時,表達對象將很難理解。
正確的描述方式:更清晰的是基于開發(fā)的語言,和技術模型的結果進行表達。將各角色與權限單元繪制成網(wǎng)格,每個交叉點網(wǎng)格中描述該角色與權限的數(shù)據(jù)關系和限制。
如下圖所示:
四、需要注意的Tips
1. 隱形的admin
在可自定義角色和權限的系統(tǒng)中,一般需要預留一個admin角色來進行系統(tǒng)的初始配置,用于添加首批的業(yè)務人員和配置基本的角色。
有的系統(tǒng)中允許存在上帝視角的admin角色,則其可以作為“超級管理員”顯示在角色配置的列表中。有的系統(tǒng)中不允許這種角色存在,則可將這種角色設置為隱形的狀態(tài),僅賦予維護系統(tǒng)的工作人員。
2. 初始權限的賦予
對于允許用戶自行加入的系統(tǒng),需要設定一至多個默認的角色,有時可以是僅有最基礎權限的“游客”角色。
初始權限還可以與用戶既有的某些數(shù)據(jù)字段進行關聯(lián),如添加用戶時獲取到用戶的崗位為“設計師”,則直接賦予“設計師”角色的權限。
3. 人員管理中對自己的處理
在人員管理中,管理員角色處理自己時需要額外注意。因為如果修改或刪除了自己角色后,可能導致系統(tǒng)沒有管理角色,從而無法添加其他成員和正常運行。設計時可添加判斷,當自己為唯一管理角色時,禁止編輯和刪除。
4. 無頁面權限的提示
雖然可以通過頁面權限限制直接隱藏當前用戶沒有權限的頁面,但不能排除用戶獲取到權限外的url地址。當用戶意外訪問到沒有權限的頁面時務必提供“無權限”的提示,避免用戶認為系統(tǒng)bug。
最后
總結一下,整個權限系統(tǒng)設計就是定義各個節(jié)點和節(jié)點間關系的過程。
節(jié)點包括:
- 用戶;
- 用戶組;
- 角色;
- 角色組;
- 權限(頁面、操作、數(shù)據(jù));
- 權限組(頁面、操作、數(shù)據(jù));
關系包括:
- 是/否關系;
- 繼承關系;
- 限制關系(互斥、范圍限制、邊界限制、字段限制……);
- ……
梳理清楚所有邏輯后,通過靈活定義節(jié)點和組合各節(jié)點之間的關,便能夠輕松完成角色權限設計的100種解法。
作者:蔣蕊遙,目標導向的交互設計師,負責設計規(guī)范、數(shù)據(jù)平臺,任務管理平臺等B端產品。設計的目的是解決問題和革新流程,但解決問題和革新流程的方法從來都不止設計
本文來源于人人都是產品經理合作媒體@網(wǎng)易UEDC,作者@蔣蕊遙
題圖來自 Pexels,基于 CC0 協(xié)議
請教下,后臺可以設置角色管理權限管理,那前臺呢,比如我做個電商的后臺,可以通過后臺設置后臺有哪些角色對應哪些權限,那前臺的比如商家,或者像滴滴的司機端,我能夠去管理他們的角色嗎,比如創(chuàng)建一個商家助手類似的角色
有幾個問題想請教下,在進行RBAC設計的時候:
1. 在查詢用戶權限的時候,需要先查詢用戶的角色,然后再查詢角色的權限,這樣比較繁瑣,有沒有更簡便的方式進行查詢?
2. 如果我想要單獨給用戶授權,那么是不是需要在權限的表里設置一個外鍵,這樣的話RBAC的作用并沒有凸顯出現(xiàn),我應該如何去設計,才能夠更好的直接給用戶進行授權?
請教一下,角色與權限組的區(qū)別在哪里呢? 如果把角色看出一組權限的集合,我覺得二者似乎是同一個概念
我也認為是同一個概念,我認為角色就是一組權限的具象命名。
權限組:是權限的集合,權限包括數(shù)據(jù)權限、功能權限,也就是所謂的資源;將通用的權限進行打包后,在賦值給角色;
比如:對象為客戶&訂單,數(shù)據(jù)權限為本部門+功能權限為查看&編輯進行打包=本部門客戶&訂單數(shù)據(jù)編輯,可以直接賦值給想要的角色,就不用每個角色進行管理了;
想請教一下,系統(tǒng)角色和實際崗位之間有什么關聯(lián)關系嗎?需要有關聯(lián)關系嗎?
我認為沒有什么關聯(lián)關系。你只需要關注同一個崗位的人的不同的權限需求在哪里,說白了你只需要關注同個崗位對頁面瀏覽,增刪改查的操作,數(shù)據(jù)有哪些不同,這些不同是否是真的不同。
真有不同需求了,通過賦予多個角色身份進行解決。
關于,條件控制權限的設計,有沒有什么總結呢?產品上如何設計更具有通用性。
您好,想請教一個偏開發(fā)問題。
一個用戶有多個角色,通過角色控制操作權限、數(shù)據(jù)權限。
假設我有A產品的編輯權限,我有B產品的下架權限。 這就導致了,我進入到不同產品的詳情頁面,會有不同的操作按鈕展示。
如果每次進入某一個頁面,都要加載一遍權限,這樣會有效率問題。
但是通過每次點擊按鈕判斷權限,體驗感又不好。
請問一般產品怎么平衡。
都展示出來,不可點擊
進入系統(tǒng)時加載權限即可,需加載新權限就需重新登錄即可。
你沒發(fā)現(xiàn),系統(tǒng)首次登錄的時候,都有引導頁嗎!為的就是讓你感覺不到加載中…
登錄的時候,一般都是返回token給前端,后端將權限信息緩存到redis里面,key是token,value是權限,當前端拿token去獲取用戶名,頭像等,就根據(jù)這個token去redis找,沒有就沒有權限,當分配角色和分配權限等按鈕,就將redis中的權限數(shù)據(jù)刪除,重新將對應的權限加載進redis中,一般后臺數(shù)據(jù)不會太大,如果人員較多,權限信息多,就需要考慮緩存問題了,如:穿透,雪崩
您好,想跟您討論一下”數(shù)據(jù)權限“的事情,
這個數(shù)據(jù)權限,頁面中哪些數(shù)據(jù)信息、字段信息不能讓某個角色看見,
這個應該是技術直接將我列的規(guī)則寫到系統(tǒng)里面去了吧?而不是前端展示進行選擇,
如果按著前端展示設計的話,可能頁面多,規(guī)則多,前端得展示的內容很多,選擇的人也選擇不過來;
那如果是技術寫規(guī)則進去,不就代表著,每一次角色如果涉及到修改數(shù)據(jù)權限的情況,每一次都讓技術進行修改了嗎?
對于這個事情我不知道如何去平衡它,麻煩請給一些建議,謝謝
如果代碼寫死靈活性太差了。這個可以做頁面配置就可以,根據(jù)角色配置數(shù)據(jù)字段的查看和下載,可以加入一個默認讀取的配置方式,就不需要每一個角色都配置。
什么時候會碰到這種場景啊 能舉個超現(xiàn)實的例子嗎
其實就是數(shù)據(jù)權限粒度比較細,導致數(shù)據(jù)權限的條目出現(xiàn)爆炸式增長。如果使用角色或者權限組來管理數(shù)據(jù)權限,那可能角色或權限組的條目會爆炸式增長。例如:全國的業(yè)務數(shù)據(jù)按照省份分,需要有33個權限組,如果要細化到省下一級單位,需要乘以一個系數(shù)的數(shù)量級增長。這些數(shù)量龐大的條目管理起來,會成為比較大的困擾。
非常棒的干貨,正在尋找類似的東西,發(fā)現(xiàn)本文真的比那些奇奇怪怪的資料強多了,很有啟發(fā)
沒看懂 權限組是什么意思?角色不就是一組權限嗎?角色和權限組有什么區(qū)別呢?煩請大佬解答哈~
例如UI設計師,分為:高級UI,中級UI,初級UI,UI設計師就是角色組。
角色組的應用場景是什么?為什么要設置角色組?
角色組解決的是【系統(tǒng)標準角色】適配【實際業(yè)務角色】的組合集成問題
提個關于數(shù)據(jù)權限的問題,煩請解答一下:
某部門,主管可看見部門下所有數(shù)據(jù),員工A只能看個人數(shù)據(jù),A突然被調到其他部門,B來接替A的工作,B如何能夠看到A之前的數(shù)據(jù)?
A只是組織結構上被調到B部門,但A的賬號還是可以保留的,修改A的賬號給B用。給A新建賬號。
A有個人數(shù)據(jù),是因為某個角色,A調走但角色還在,B進來就是這個角色,怎么看不到數(shù)據(jù)
數(shù)據(jù)權限有ownerID的
可以拆分為兩個問題:權限繼承、離職交接;
1、變更部門涉及權限繼承,是繼承原有權限,還是更換新權限;如果是繼承原有權限,就無需處理,更換部門即可;如果是更換新權限,需要觸發(fā)離職交接規(guī)則;
2、離職交接,要配置交接人;
如上場景,A更換部門可以選擇繼承數(shù)據(jù)帶走,則主管就看不到A的數(shù)據(jù),新主管就可以看到;如果A選擇交接,則需要通過離職交接將數(shù)據(jù)交接給B;
總結的很好,跟我之前產品里設計的權限管理很像~
??
想請教下,數(shù)據(jù)的權限點怎么添加呢,
人產上為數(shù)不多的干貨,給個贊!
哎呀… 在網(wǎng)上看了好多關于權限設計的文章,唯獨此文章讓我看到了權限設計的核心性的東西。(一句:哎呀。道出了久違的困惑,慢慢的喜悅感)
感覺作者能夠分享出這么好的內容,已學習。 不過得慢慢吸收?。?/p>
在做權限設計的時候,總覺得用戶組與角色組是重復。
今天看完以后,發(fā)現(xiàn)還是有區(qū)別的,用戶組像一個項目組,好比一個群或討論組,而角色是身份、崗位。
受教了,32個贊~
必須給作者點個贊
1個用戶,有多重角色,而且這多重角色之間權限還有交集,配置多個角色的意義是什么的?直接新建一個角色,給這個角色賦予需要的權限不就可以了嘛?不是很明白給一個用戶賦予多重角色的場景~謝謝,請賜教
問題同上 ??
我們產品有這種場景,為了方便學校老師理解和使用,固定角色且不允許編輯,角色有校長,教師,財務,運營。教師和運營的功能權限有交集,但是數(shù)據(jù)權限有沖突。(運營可以看所有教師的課程售賣數(shù)據(jù),每個教師只能看見自己課程售賣數(shù)據(jù))。 有些學校員工較少所以允許多角色。 如果新建一個角色,老師們反而不好理解。
多角色什么場景會用到?謝謝
n個操作員,但是操作權限都不一樣。
A老板 之前是運營部門的經理,現(xiàn)在要身兼商務部門的總監(jiān),
面對的數(shù)據(jù)權限和操作權限都不一樣,所以需要多角色。
不能單獨改一個經理的權限,因為不止一個運營部門經理。
同樣也是在梳理角色權限,同樣也是項目管理類的內部產品,看了很有啟發(fā),感謝網(wǎng)易hh
對于正在整理權限功能的我來說是篇干貨,整體思路相似,還有不少借鑒之處,感謝??
看完,霍然開朗,之前設計角色權限時,雖然也是這么干的,但總感覺不夠系統(tǒng),有遺漏的地方……感謝作者分享。
100種在哪呢?
不知道
哈哈,我也想問
??
杠精。。。
1000種都有,P33×P66,自己算多少種可能
沒理解。。P33 P66是怎么什么意思,望賜教
總結的很全面
很專業(yè)
很到位,經驗之談