熟悉這四種權(quán)限管理模型,產(chǎn)品迭代才能心里有數(shù)
不管是2C產(chǎn)品經(jīng)理還是2B產(chǎn)品經(jīng)理,都要將權(quán)限管理法則爛熟于心。只有熟悉權(quán)限管理法則,才能更好地理解自己產(chǎn)品的架構(gòu),做到每次產(chǎn)品迭代都心里有數(shù)。
從本質(zhì)來(lái)說(shuō),無(wú)論何種類型的權(quán)限管理模型都可以抽象出三個(gè)基本的要素——即:用戶(user)、系統(tǒng)/應(yīng)用(system/application)、策略(policy)。
策略決定了用戶和不同功能應(yīng)用之間如何交互。反過(guò)來(lái),也就是說(shuō),無(wú)論設(shè)計(jì)何種權(quán)限管理的模型,都是基于這三個(gè)基本要素來(lái)展開(kāi)。
本文聚焦于目前應(yīng)用最廣的RBAC模型,但在這里提出三個(gè)基本要素,主要是為了幫助大家更好的理解權(quán)限管理,不至于在眾多權(quán)限模型中迷失。
不同的公司或軟件提供商,設(shè)計(jì)了無(wú)數(shù)種控制用戶訪問(wèn)功能或資源的方法。但無(wú)論哪種設(shè)計(jì),都可歸到四種經(jīng)典權(quán)限模型里——自主訪問(wèn)控制(DAC,Discretionary Access Control)、強(qiáng)制訪問(wèn)控制 (MAC,Mandatory Access Control)、基于角色訪問(wèn)控制 (RBAC,Role-based Access Control) 和基于屬性訪問(wèn)控制? (ABAC,Attribute-based Access Control).
(我覺(jué)得翻譯不好,但也找不到更貼切的。本文下面內(nèi)容均以英文首字母來(lái)代替:DAC,MAC,RBAC,ABAC)。
一、DAC,MAC
本文主要就RBAC展開(kāi)分析該模型的使用場(chǎng)景,以及如何基于該模型設(shè)計(jì)出合適的權(quán)限管理體系。但從文章便于理解的完整性的角度來(lái)考慮,會(huì)對(duì)DAC,MAC和ABAC進(jìn)行簡(jiǎn)要的介紹。
DAC:被操作對(duì)象,根據(jù)訪問(wèn)控制規(guī)則,來(lái)判斷操作主體可對(duì)操作對(duì)象做哪些操作,比如只讀或者是可寫(xiě)的權(quán)限。而自主的含義,則是擁有某種權(quán)限的用戶,可以把權(quán)限賦予其他用戶。
MAC:被操作對(duì)象及用戶兩方均有各自的權(quán)限標(biāo)識(shí),用戶能否對(duì)對(duì)象進(jìn)行操作,取決于權(quán)限標(biāo)識(shí)的對(duì)照關(guān)系。這種模型多用于等級(jí)制度明顯,信息訪問(wèn)安全性要求高的場(chǎng)景,比如軍事。
ABAC和RBAC有很多相通的地方,而且相比較而言ABAC實(shí)際上更靈活,符合未來(lái)發(fā)展的方向。因此,我們分析完RBAC后,再回過(guò)頭來(lái)看ABAC。
二、那么,什么是RBAC呢?
Role-based Access Control,基于角色的權(quán)限控制模型。
顧名思義,給用戶定義角色,通過(guò)角色來(lái)控制權(quán)限。目前來(lái)說(shuō)基于角色權(quán)限控制模型是應(yīng)用較廣的一個(gè)。特別是2B方向SAAS領(lǐng)域,應(yīng)用尤其常見(jiàn)。
如上圖示,用戶擁有角色,且可擁有多個(gè)角色,而每個(gè)角色對(duì)應(yīng)不同權(quán)限。
這樣的好處是:不必為每一個(gè)用戶去配置權(quán)限,擁有極大的靈活性和便利性。而當(dāng)用戶及權(quán)限的量級(jí)又大到另一個(gè)級(jí)別時(shí),又引入了角色組和權(quán)限組概念,此處不做延伸,有興趣的讀者可以去搜些資料來(lái)看。
三、怎么利用RBAC模型來(lái)進(jìn)行權(quán)限體系的設(shè)計(jì)?
我們已經(jīng)知道什么是RBAC模型了,在分析怎么來(lái)根據(jù)此模型來(lái)設(shè)計(jì)權(quán)限體系之前,我們?cè)侔堰@個(gè)模型要素進(jìn)行拆分一下。
首先是:用戶、角色、權(quán)限。
而權(quán)限,具體到某個(gè)軟件來(lái)說(shuō),實(shí)際上包含兩個(gè)方面。一個(gè)是菜單權(quán)限,另一個(gè)是數(shù)據(jù)權(quán)限。
不同的行業(yè)會(huì)有不同的使用場(chǎng)景,用戶角色權(quán)限模型也會(huì)有不同程度上的變化。但歸到底層來(lái)說(shuō),還是離不開(kāi)上面我畫(huà)的這個(gè)圖。
上面這個(gè)圖是從官網(wǎng)看到的,銷售自動(dòng)化領(lǐng)域十分典型的用戶權(quán)限管理設(shè)計(jì)。
接下來(lái),我們來(lái)抽象一個(gè)場(chǎng)景或者說(shuō)案例,來(lái)輔助我們理解整個(gè)權(quán)限管理設(shè)計(jì)的過(guò)程。假設(shè)A公司是個(gè)中大型的生產(chǎn)制造公司,公司有OA、HR、CRM、ERP一系列管理軟件。公司員工以萬(wàn)計(jì),不同人員職責(zé)不同,體現(xiàn)在管理軟件上,就是會(huì)需要使用不同的功能來(lái)完成工作。
帳號(hào)管理
帳號(hào)是人和軟件進(jìn)行交互時(shí)的一個(gè)身份的轉(zhuǎn)化。賬號(hào)的背后,代表了這個(gè)操作的人。賬號(hào)管理應(yīng)該是所有需要和系統(tǒng)交互的人的統(tǒng)一管理,包含基礎(chǔ)信息,比如:這個(gè)人的名字,性別、手機(jī)號(hào)、部門(mén)以及其他屬性。
角色管理
角色管理,就是要從實(shí)際場(chǎng)景出發(fā),比如:使用系統(tǒng)的企業(yè)或者團(tuán)體,有哪幾類使用的角色——也就是說(shuō),有哪幾類人,是需要有不同的業(yè)務(wù)菜單和業(yè)務(wù)數(shù)據(jù)的。
說(shuō)到底,角色管理,就是把這個(gè)角色對(duì)應(yīng)的人平時(shí)工作需要的菜單、功能給劃到一個(gè)組里。給這一個(gè)個(gè)的操作組定義不同的名稱——即角色名稱。
當(dāng)然,這個(gè)角色管理除了規(guī)定了該角色的人平時(shí)可對(duì)哪些功能進(jìn)行查看操作,還需規(guī)定這個(gè)角色,能看到哪些范圍內(nèi)的數(shù)據(jù)。也就是前面提到的,權(quán)限實(shí)際上包含的是菜單權(quán)限和數(shù)據(jù)權(quán)限兩部分。
系統(tǒng)內(nèi)功能控制的顆粒度越細(xì),對(duì)使用者來(lái)說(shuō)配置角色便越靈活,但對(duì)系統(tǒng)的設(shè)計(jì)者來(lái)說(shuō),系統(tǒng)的復(fù)雜度自然也會(huì)上升,成本也會(huì)增加。
因此,到底控制到哪一層級(jí),就要視具體業(yè)務(wù)場(chǎng)景來(lái)定,比如:有些行業(yè)的系統(tǒng),可能控制到一級(jí)菜單就可以(某些SAAS工具),但有些系統(tǒng),不僅需要控制所有的子級(jí)菜單,每一個(gè)按鈕操作,甚至還會(huì)需要控制到不同的字段(比如Salesforce的權(quán)限控制系統(tǒng))。
不過(guò),我們抽象出了基本的模型,根據(jù)實(shí)際業(yè)務(wù)再去發(fā)散,就不是最困難的事了。
四、看看ABAC,順便暢想下未來(lái)的權(quán)限模式
至此,我們可以了解到:RBAC模型實(shí)際上能解決大部分的權(quán)限設(shè)計(jì)問(wèn)題了。
那么,ABAC到底是什么呢?它存在的意義在哪里?關(guān)于未來(lái)的權(quán)限設(shè)計(jì)趨勢(shì),它能帶給我們什么啟發(fā)呢?
帶著這些問(wèn)題,我們先來(lái)看看到底什么是ABAC模型。
ABAC,Attribute-based Access Control. 基于屬性的訪問(wèn)控制。而屬性,總的來(lái)說(shuō)有三類:用戶屬性、系統(tǒng)或應(yīng)用被訪問(wèn)屬性(數(shù)據(jù)和操作)、環(huán)境屬性。
也就是說(shuō),系統(tǒng)根據(jù)一組或多組屬性是否滿足預(yù)設(shè)規(guī)則來(lái)動(dòng)態(tài)的控制,誰(shuí)可以訪問(wèn)哪些功能數(shù)據(jù)和操作。RBAC模型,其實(shí)可以看成是靜態(tài)的、單組屬性的ABAC模型。
用例子來(lái)理解這個(gè)模型就是:只有當(dāng)用戶角色為Admin,在工作時(shí)間內(nèi),且處在C棟大樓B實(shí)驗(yàn)室,才可以訪問(wèn)D文件。
實(shí)際上,ABAC是個(gè)可以以最細(xì)顆粒度來(lái)管理權(quán)限的模型。它可以讓設(shè)計(jì)者,利用任何一個(gè)用戶屬性、環(huán)境屬性,或者多個(gè)屬性之間的交集、并集等來(lái)組合出動(dòng)態(tài)的權(quán)限判斷邏輯。
它是這么強(qiáng)大,既可以有效的幫助信息辨別能力差的用戶過(guò)濾垃圾信息。也可以讓商家用到營(yíng)銷廣告填滿你生活的每個(gè)角落卻不自知。
但我一直堅(jiān)信,科技絕對(duì)是讓生活更美好。
五、總結(jié)一下
權(quán)限管理,可能是每個(gè)2B產(chǎn)品經(jīng)理需要面對(duì)的問(wèn)題。但無(wú)論C端還是B端的產(chǎn)品,了解權(quán)限管理的設(shè)計(jì)法則,讓自己更好的理解產(chǎn)品的架構(gòu),讓產(chǎn)品的每次迭代都心里有數(shù)。
本文由@2B產(chǎn)品七七 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自Unspalsh, 基于CC0協(xié)議。
您上文提到的數(shù)據(jù)權(quán)限是基于角色控制的,如果一個(gè)角色中多個(gè)功能的數(shù)據(jù)權(quán)限不同呢?那需要通過(guò)多個(gè)角色控制嗎?這樣不會(huì)讓角色變得冗余嗎?
基于abac的有展開(kāi)嗎?
菜鳥(niǎo)想問(wèn)下:數(shù)據(jù)權(quán)限中的,查看本人及下屬,查看部門(mén)等,系統(tǒng)是如何區(qū)分部門(mén)及上下屬之間的關(guān)系的???這是怎么設(shè)計(jì)的啊
那就是涉及到OA這塊的了。組織架構(gòu)管理,員工管理,職位管理等。就把部門(mén)和部門(mén)之間,部門(mén)和人之間,人和人之間的關(guān)系建立起來(lái)了。
作者不知道還能不能收到我的回復(fù),我覺(jué)得你 RBAC 中的例子里已經(jīng)涉及到 ABAC 模型了。
看到后面了,你后面也說(shuō)了,其實(shí) RBAC 本身也是 ABAC 的一種 RBAC 的屬性只有一個(gè),那就是功能屬性。
個(gè)人理解 不知道是否正確 ABAC和RBAC的不同點(diǎn)在于 RBAC是基于角色的緯度 為角色分配功能和功能下的權(quán)限范圍 而ABAC是為每項(xiàng)功能分配相應(yīng)可使用他的角色 這個(gè)可使用 包含時(shí)間 地點(diǎn) 權(quán)限范圍的控制等緯度 這樣可以實(shí)現(xiàn)嗎
贊,這個(gè)角度考慮很特別。
我們公司支持這種模型
可以這樣實(shí)現(xiàn)的,實(shí)際上我們公司就支持這么做的。但是有個(gè)問(wèn)題,即使你我一樣是一樣的角色,因?yàn)榻巧邪四阏f(shuō)的時(shí)間、地點(diǎn)、權(quán)限范圍這些數(shù)據(jù),導(dǎo)致我兩的權(quán)限已經(jīng)千差萬(wàn)別了。此時(shí)角色失去了它該有的價(jià)值。
有舉例就完美了
占位
rbac最細(xì)致的權(quán)限維度是“功能權(quán)限”和“數(shù)據(jù)權(quán)限”,通過(guò)將這些權(quán)限聚合形成角色、崗位、功能等與賬號(hào)綁定起來(lái)。ABAC中的例子:“只有當(dāng)用戶角色為Admin,在工作時(shí)間內(nèi),且處在C棟大樓B實(shí)驗(yàn)室,才可以訪問(wèn)D文件?!睉?yīng)該在系統(tǒng)中實(shí)現(xiàn)的時(shí)候,應(yīng)該是“賬戶巨有admin角色,admin角色擁有‘訪問(wèn)’這一功能權(quán)限,以及‘D文件’這一數(shù)據(jù)權(quán)限,以及‘工作時(shí)間、C棟大樓B實(shí)驗(yàn)室’這一環(huán)境權(quán)限”。這樣看,基礎(chǔ)維度應(yīng)該是,功能權(quán)限(操作),數(shù)據(jù)權(quán)限(操作對(duì)象),環(huán)境權(quán)限(操作發(fā)生環(huán)境),角色依然可以是權(quán)限聚合的產(chǎn)物。
是的,這樣理解也可以的。但其實(shí)我覺(jué)得這幾種模型,倒沒(méi)有說(shuō)是有絕對(duì)的分割線的。都是從用戶、系統(tǒng)、規(guī)則三個(gè)基本要素展開(kāi)的。使用的場(chǎng)景、用戶使用的復(fù)雜度決定了具體需要利用哪種模型。因?yàn)槟P鸵欢ㄊ蔷?jiǎn)的,如果十分復(fù)雜,則說(shuō)明不是最好的模型。你理解的很透徹。多多交流。
我也2b一起交流
哈哈好滴
你也是2B?我不是,我是toB….