后臺(tái)產(chǎn)品設(shè)計(jì)系列:?jiǎn)蜗到y(tǒng)與多系統(tǒng)的用戶權(quán)限設(shè)計(jì)(五)
上篇,給大家介紹了后臺(tái)產(chǎn)品比較通用的五個(gè)原型設(shè)計(jì)要點(diǎn),此篇,筆者將介紹后臺(tái)產(chǎn)品另一個(gè)通用設(shè)計(jì)——用戶權(quán)限設(shè)計(jì)。
由于保密、體驗(yàn)、安全等多種因素,用戶權(quán)限設(shè)計(jì)成為每個(gè)后臺(tái)產(chǎn)品的必備功能。那么作為產(chǎn)品經(jīng)理,面對(duì)不同復(fù)雜度的系統(tǒng),又該如何來(lái)做呢?
目前,用戶權(quán)限設(shè)計(jì)最主流的方式是基于RBAC模型的用戶、角色、權(quán)限的設(shè)計(jì),這種基于角色的權(quán)限設(shè)計(jì)能夠非常靈活、高效,并應(yīng)對(duì)更多場(chǎng)景的需求。不過(guò),雖然理論基礎(chǔ)一樣,單系統(tǒng)的用戶權(quán)限與多系統(tǒng)的用戶權(quán)限在實(shí)際產(chǎn)品設(shè)計(jì)中,卻存在較大差異。
本篇,筆者將分享基于RBAC模型的單系統(tǒng)權(quán)限設(shè)計(jì)和在此基礎(chǔ)上拓展的多系統(tǒng)權(quán)限設(shè)計(jì)。
一、RBAC模型概述
1. RBAC是什么
RBAC模型:Role-Based Access Control,基于角色的訪問(wèn)控制。
名稱有點(diǎn)拗口,具體怎么理解呢?
重點(diǎn)就是這個(gè)角色。舉個(gè)栗子:小王是名財(cái)務(wù),能夠?qū)徟鷪?bào)銷(xiāo)單和發(fā)工資。在這個(gè)場(chǎng)景里,“小王”就是“用戶”,“財(cái)務(wù)”就是“角色”,“審批報(bào)銷(xiāo)單和發(fā)工資”就是“權(quán)限”,在沒(méi)有引入“角色”前,權(quán)限都是直接指給用戶的,就是“小王能夠?qū)徟鷪?bào)銷(xiāo)單和發(fā)工資”,那么這里就有問(wèn)題了。
- 到底什么樣的人才能審批報(bào)銷(xiāo)單和發(fā)工資呢?我們需要做一個(gè)歸類,比如把這一批人歸為財(cái)務(wù),把那一批人歸為領(lǐng)導(dǎo)親戚,就是把擁有同樣權(quán)限的人設(shè)定一個(gè)“角色”,進(jìn)行歸類。
- 如果沒(méi)有角色,那么擁有同樣權(quán)限的人就得每個(gè)都配一遍,有人員流動(dòng)時(shí)又要再配一次,很麻煩。引入“角色”后,我們把權(quán)限指派給“角色”,這樣在配權(quán)限時(shí),只需要將“用戶”關(guān)聯(lián)上角色就可以了。
通過(guò)下圖連線條數(shù)就可以看出哪種方式更簡(jiǎn)單:
整個(gè)RBAC的核心就是這個(gè)。那么根據(jù)這套模型功能的復(fù)雜程度不同,由簡(jiǎn)單到復(fù)雜又可以分為RBAC-0、RBAC-1、RBAC-2、RBAC-3四個(gè)層級(jí)。
2. RBAC的四大模型
RBAC-0
RBAC-0是最基礎(chǔ)的,就是在用戶與角色、角色與權(quán)限間建立關(guān)系,每種關(guān)系均為多對(duì)多。
RBAC-1
RBAC-1是在RBAC-0的基礎(chǔ)上,增加了繼承關(guān)系。就是一個(gè)角色只能有另一角色的部分權(quán)限,這個(gè)角色的權(quán)限大小受另一角色權(quán)限影響。例如:財(cái)務(wù)主管有三個(gè)權(quán)限,那么財(cái)務(wù)專員的權(quán)限一定要小于主管的權(quán)限,所以上班就不能扯犢子,只能主管可以。
如果財(cái)務(wù)主管有需求,我們還應(yīng)在角色權(quán)限配置頁(yè)面,給財(cái)務(wù)主管自己配置財(cái)務(wù)專員的的權(quán)限,由財(cái)務(wù)主管自由設(shè)置財(cái)務(wù)專員的用戶是誰(shuí)、權(quán)限有哪些,哪天主管自己一個(gè)人扯得無(wú)聊,就可以自己偷偷在配置頁(yè)面給專員也開(kāi)個(gè)“上班扯犢子”權(quán)限,然后兩個(gè)人就可以愉快的互扯了,扯完了再自己手動(dòng)關(guān)掉,美滋滋。
RBAC-2
從上面的例子中,我們可以看到,如果用戶、角色、權(quán)限完全自由,隨意配置,會(huì)存在很大風(fēng)險(xiǎn),領(lǐng)導(dǎo)小舅子既當(dāng)財(cái)務(wù)主管,又當(dāng)老板秘書(shū),財(cái)政大權(quán)和老板行程全被掌控。于是,老板就規(guī)定:任何一個(gè)人,“財(cái)務(wù)主管”與“老板秘書(shū)”兩個(gè)角色只能二選一。
這種權(quán)限模式就是我們的RBAC-2,在用戶、角色、權(quán)限三者間增加各種限制條件,例如每個(gè)用戶角色最多兩種:一個(gè)用戶不能同時(shí)擁有某兩個(gè)有關(guān)聯(lián)的角色;一個(gè)用戶同時(shí)只能以一種角色身份登錄等等。
RBAC-3
RBAC-3是RBAC-1與RBAC-2的結(jié)合,就是既有繼承關(guān)系,又有限制條件,基礎(chǔ)都一樣。
介紹完理論基礎(chǔ),再來(lái)分享這套理論在單系統(tǒng)與多系統(tǒng)中的應(yīng)用
二、單系統(tǒng)的權(quán)限設(shè)計(jì)
當(dāng)我們針對(duì)一個(gè)單一系統(tǒng)做權(quán)限設(shè)計(jì)時(shí),我們需要在系統(tǒng)中將用戶、角色、權(quán)限三個(gè)實(shí)體都管理起來(lái),設(shè)計(jì)對(duì)應(yīng)的配置頁(yè)面。
1. 用戶管理
用戶管理模塊,主要功能是將此系統(tǒng)用戶進(jìn)行管理,一般而言,系統(tǒng)中需要做用戶信息維護(hù)的,用戶數(shù)都比較小,所以不用做太多其他功能,只需維護(hù)幾個(gè)簡(jiǎn)單字段就可以了。
對(duì)于如何創(chuàng)建用戶這個(gè)問(wèn)題,需區(qū)分不同場(chǎng)景。如果是公司內(nèi)部使用的系統(tǒng),不需要做注冊(cè)功能,直接在系統(tǒng)中由管理員手動(dòng)新增用戶,而用戶的賬號(hào)密碼既可按某一指定規(guī)則自動(dòng)生成,也可以手動(dòng)錄入。
根據(jù)需求,可選擇是否開(kāi)放用戶登錄后修改自己密碼的權(quán)限;而如果是To B的產(chǎn)品,則需要設(shè)計(jì)注冊(cè)功能,供免費(fèi)注冊(cè)體驗(yàn)等,而注冊(cè)的用戶,則默認(rèn)為管理員角色,然后由注冊(cè)用戶自己添加其他使用者。
2. 角色管理
角色作為用戶與權(quán)限的中間方,無(wú)法獨(dú)立存在。角色的定義是完全基于業(yè)務(wù)需求來(lái)確定的,很多時(shí)候角色容易與公司組織架構(gòu)中的職位混淆,然后在角色定義時(shí)總想著與公司各職位保持一致。但其實(shí)這種強(qiáng)行一致是沒(méi)有必要的,業(yè)務(wù)需要定義什么角色,就定義那個(gè)角色就好,職位和角色可能有對(duì)應(yīng)關(guān)系,但并不相同,也許稱呼一樣,但分屬不同實(shí)體管理。
3. 權(quán)限管理
按用途來(lái)分,權(quán)限可以分為數(shù)據(jù)權(quán)限和操作權(quán)限。
(1)數(shù)據(jù)權(quán)限
數(shù)據(jù)權(quán)限是指用戶是否能夠看到某些數(shù)據(jù)。主要應(yīng)用在數(shù)據(jù)有保密要求,或數(shù)據(jù)量大,需按用戶或角色來(lái)進(jìn)行區(qū)分時(shí)。例如:財(cái)務(wù)主管在后臺(tái)可以看到公司所有人的工資流水,但普通員工只能看到自己的工資流水。
在這里,有的同學(xué)或許認(rèn)為,既然我們的權(quán)限是跟角色關(guān)聯(lián),為什么“查看工資流水”這個(gè)權(quán)限精確到每個(gè)用戶了呢?
其實(shí)這就是RBAC-2的一種,權(quán)限與角色關(guān)聯(lián)后增加了限制條件,不過(guò)這種限制條件無(wú)法在頁(yè)面上靈活配置。
數(shù)據(jù)權(quán)限的顆粒度由粗到細(xì)可以分為菜單級(jí)、欄目級(jí)、字段級(jí),一般配置頁(yè)面都可以靈活操作。
(2)操作權(quán)限
操作權(quán)限是指用戶是否能夠操作對(duì)應(yīng)按鈕。需要先有數(shù)據(jù)權(quán)限,才有操作權(quán)限,所以需要增加系統(tǒng)自動(dòng)校驗(yàn):
- 選擇了操作權(quán)限,就默認(rèn)勾選了查看(數(shù)據(jù))權(quán)限;
- 取消了數(shù)據(jù)權(quán)限,就自動(dòng)取消了操作權(quán)限
以上就是我們做單系統(tǒng)的權(quán)限設(shè)計(jì)分享的內(nèi)容。在多系統(tǒng)的權(quán)限設(shè)計(jì)中,雖然理論基礎(chǔ)一樣,但因?yàn)樯婕暗蕉鄠€(gè)系統(tǒng),所以產(chǎn)生了很多其他問(wèn)題,需要另外解決。
三、多系統(tǒng)的權(quán)限設(shè)計(jì)
1. 多系統(tǒng)權(quán)限設(shè)計(jì)場(chǎng)景
- 場(chǎng)景一:多個(gè)子系統(tǒng)共屬于同一母系統(tǒng),同時(shí)每個(gè)子系統(tǒng)已微服務(wù)化,代碼不耦合;
- 場(chǎng)景二:多系統(tǒng)各自獨(dú)立,每個(gè)系統(tǒng)都要做用戶權(quán)限設(shè)計(jì),用戶都是同一批人,例如都是公司所有員工,這種場(chǎng)景在大公司經(jīng)??梢?jiàn)。
2. 兩種場(chǎng)景下產(chǎn)生的問(wèn)題
場(chǎng)景一:
Q1:既然每個(gè)子系統(tǒng)已分離,那么是針對(duì)母系統(tǒng)做一個(gè)權(quán)限管理模塊還是每個(gè)子系統(tǒng)分別做一個(gè)?如果是針對(duì)母系統(tǒng)來(lái)做,就意味著這個(gè)模塊需要跟每個(gè)子系統(tǒng)對(duì)接,而如果每個(gè)子系統(tǒng)做一個(gè),業(yè)務(wù)上用戶、角色會(huì)有重復(fù),會(huì)導(dǎo)致資源浪費(fèi),并讓母系統(tǒng)不再像一個(gè)整體的產(chǎn)品。
場(chǎng)景二:
Q1:多個(gè)系統(tǒng),用戶重合時(shí),用戶信息在一處管理還是多處管理?
Q2:一個(gè)角色多個(gè)系統(tǒng)要用,是否也可以統(tǒng)一管理?例如:項(xiàng)目經(jīng)理,在不同的系統(tǒng)中,均有此角色,是否可以復(fù)用?
Q3:有的角色下的用戶能否無(wú)需配置,跟職位掛鉤,用戶入職時(shí)錄入的用戶管理系統(tǒng)就自動(dòng)在對(duì)應(yīng)系統(tǒng)有了角色?
3. 解決方案
無(wú)論是單系統(tǒng)還是多系統(tǒng),用戶權(quán)限設(shè)計(jì)都是圍繞用戶、角色、權(quán)限三者間的關(guān)系展開(kāi)的,只是在多系統(tǒng)中,需要增加考慮的是這三者分別在哪里配置及是否需要跟其他信息關(guān)聯(lián)的問(wèn)題。
場(chǎng)景一
Q1:針對(duì)母系統(tǒng)做一個(gè)權(quán)限管理模塊,一方面對(duì)外,母系統(tǒng)才是一個(gè)產(chǎn)品,另一方面能節(jié)約資源。但是因?yàn)樽酉到y(tǒng)間的解耦,我們做的這個(gè)權(quán)限管理模塊也要當(dāng)做一個(gè)小的子系統(tǒng)來(lái)做,然后與其他子系統(tǒng)做對(duì)接,如果架構(gòu)組不因此單獨(dú)給資源,可以做到其中一個(gè)子系統(tǒng)中,通過(guò)這個(gè)子系統(tǒng)控制其他子系統(tǒng)的用戶權(quán)限。
場(chǎng)景二
Q1:所有用戶信息在一處維護(hù)。建立一個(gè)第三方系統(tǒng)——用戶管理系統(tǒng),單獨(dú)管理用戶信息,跟其他各個(gè)系統(tǒng)對(duì)接,而角色和權(quán)限由各個(gè)系統(tǒng)自己管理。這種做法的好處不僅可以節(jié)省資源,還可以保證數(shù)據(jù)的一致性,同時(shí)需要引入用戶組的概念。用戶組可以是同一崗位的用戶集合,也可以自定義同一類人的集合,這樣在關(guān)聯(lián)用戶時(shí),就可以批量操作。
Q2:如果一個(gè)角色多個(gè)系統(tǒng)共用,是不需要有一個(gè)類似用戶管理系統(tǒng)那種單獨(dú)的管理系統(tǒng)的,因?yàn)榻巧珶o(wú)法獨(dú)立存在,角色必須依賴權(quán)限,而權(quán)限一定是在各個(gè)系統(tǒng)中獨(dú)自管理,即使共用角色有一個(gè)統(tǒng)一管理的地方,在各個(gè)系統(tǒng)仍需管理,所以沒(méi)有這個(gè)必要。
Q3:在管理用戶時(shí),可以增加“職位”的信息管理,由原來(lái)的“用戶——角色——權(quán)限”變?yōu)椤坝脩簟毼弧巧獧?quán)限”,將“職位”與“角色”直接關(guān)聯(lián),“用戶”與“角色”就可以通過(guò)“職位”間接關(guān)聯(lián),每次有新員工入職時(shí),設(shè)置好其職位,那么各個(gè)系統(tǒng)的角色也就確定了,快速方便。
相關(guān)閱讀
后臺(tái)產(chǎn)品設(shè)計(jì)系列:認(rèn)識(shí)后臺(tái)(一)
后臺(tái)產(chǎn)品設(shè)計(jì)系列:產(chǎn)品設(shè)計(jì)方式(二)
后臺(tái)產(chǎn)品設(shè)計(jì):流程設(shè)計(jì)(三)
后臺(tái)產(chǎn)品設(shè)計(jì)系列:原型設(shè)計(jì)五大要點(diǎn)(四)
作者:周翔,起點(diǎn)學(xué)院深圳1609期產(chǎn)品經(jīng)理實(shí)戰(zhàn)訓(xùn)練營(yíng)學(xué)員
本文由 @周翔 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash,基于CC0協(xié)議
就數(shù)據(jù)權(quán)限和操作權(quán)限想分享一下自己的觀點(diǎn),作者寫(xiě)的3-1 3-2部分沒(méi)有問(wèn)題,只是我換一種方式理解。首先功能權(quán)限是會(huì)按照角色及子角色進(jìn)行定義的,然后這些是基于數(shù)據(jù)權(quán)限和業(yè)務(wù)流程等內(nèi)容來(lái)決定的,這是沒(méi)有問(wèn)題的,只是在數(shù)據(jù)權(quán)限那部分拆分一下數(shù)據(jù)類型權(quán)限和數(shù)據(jù)范圍權(quán)限我覺(jué)得會(huì)更容易理解,比如采購(gòu)可以看生產(chǎn)計(jì)劃數(shù)據(jù)和成本數(shù)據(jù),而工廠只能看生產(chǎn)計(jì)劃數(shù)據(jù)這個(gè)是數(shù)據(jù)類型權(quán)限,同樣會(huì)影響對(duì)應(yīng)的功能,比如成本查詢功能等,另一種數(shù)據(jù)范圍就是作者講的,可能工廠一只能看工廠一的數(shù)據(jù),工廠二只能看工廠二的數(shù)據(jù),我覺(jué)得這個(gè)可以成為數(shù)據(jù)范圍權(quán)限,這樣有利于兩者的區(qū)別,另外后者可能頁(yè)面不好進(jìn)行配置,而是通過(guò)用戶管理對(duì)其數(shù)據(jù)范圍進(jìn)行約束,甚至影響到其在一些條件表單選擇內(nèi)容時(shí)的數(shù)據(jù)范圍;
“如果一個(gè)角色多個(gè)系統(tǒng)共用,是不需要有一個(gè)類似用戶管理系統(tǒng)那種單獨(dú)的管理系統(tǒng)的,因?yàn)榻巧珶o(wú)法獨(dú)立存在,角色必須依賴權(quán)限,而權(quán)限一定是在各個(gè)系統(tǒng)中獨(dú)自管理,即使共用角色有一個(gè)統(tǒng)一管理的地方,在各個(gè)系統(tǒng)仍需管理,所以沒(méi)有這個(gè)必要?!边@個(gè)回答沒(méi)看明白,如果每個(gè)角色都?xì)w屬到系統(tǒng)下,那一些共用角色,不就需要每個(gè)系統(tǒng)都建一個(gè)角色嗎
學(xué)習(xí)了,謝謝分享。
學(xué)習(xí)了 ??