一個(gè)實(shí)例:基于RBAC理論的訪(fǎng)問(wèn)控制實(shí)踐

1 評(píng)論 11752 瀏覽 38 收藏 15 分鐘

基于角色的訪(fǎng)問(wèn)控制(RBAC)是目前公認(rèn)的解決大型企業(yè)的統(tǒng)一資源訪(fǎng)問(wèn)控制的有效方法。訪(fǎng)問(wèn)控制實(shí)際是復(fù)雜的,解決方式也是多樣的。不用一味追求完善,在有限的資源內(nèi)選擇最合適自己的更重要。

基于角色的訪(fǎng)問(wèn)控制(RBAC)是目前公認(rèn)的解決大型企業(yè)的統(tǒng)一資源訪(fǎng)問(wèn)控制的有效方法,傳統(tǒng)的訪(fǎng)問(wèn)控制中我們直接將權(quán)限賦予用戶(hù),而在基于角色訪(fǎng)問(wèn)控制中先將權(quán)限賦予角色,再通過(guò)角色與用戶(hù)連接。

一個(gè)實(shí)例

這里跳過(guò)對(duì)理論模型的解釋?zhuān)宰罱囊粋€(gè)項(xiàng)目為例,談下實(shí)際項(xiàng)目中的應(yīng)用。首先交代背景:

(1)簡(jiǎn)易電商后臺(tái)版本,意思就是很小不需要什么復(fù)雜權(quán)限,開(kāi)始也沒(méi)考慮權(quán)限。

(2)有一個(gè)管理員賬號(hào)運(yùn)營(yíng)和開(kāi)發(fā)都在用,一個(gè)財(cái)務(wù)賬號(hào)給財(cái)務(wù)導(dǎo)數(shù)據(jù),新建供應(yīng)商同時(shí)生成商家賬號(hào),給商家上架商品發(fā)貨這些。

(3)需要增加權(quán)限的契機(jī)就是隨著業(yè)務(wù)擴(kuò)大,功能變得復(fù)雜了些,再不做就要亂了。

功能模塊

權(quán)限的功能模塊分為三個(gè)部分:

用戶(hù)管理就是給用戶(hù)添加登錄賬號(hào),讓用戶(hù)能夠登錄系統(tǒng);

角色是告訴你我在這個(gè)身份下能在系統(tǒng)干什么;

權(quán)限配置是對(duì)權(quán)限功能的管理,讓系統(tǒng)管理員或開(kāi)發(fā)人員更清楚靈活管理配置系統(tǒng)頁(yè)面權(quán)限、功能權(quán)限,反正就是普通用戶(hù)用不著那種。

角色管理

首先是添加角色。

字段非常簡(jiǎn)單,只要寫(xiě)好角色名稱(chēng)和描述角色是做什么的就可以。

其次是分配權(quán)限。

很多系統(tǒng)做法是直接在編輯或者添加頁(yè)面一起把權(quán)限分配做了。我更偏好是一個(gè)動(dòng)作下只做一件事,會(huì)比較清晰些。所以這里做了兩個(gè)步驟,就是角色信息和權(quán)限分配獨(dú)立開(kāi)。

在頁(yè)面交互上,這里并沒(méi)有使用純樹(shù)形,而是結(jié)合菜單+頁(yè)面形式:左邊展示導(dǎo)航菜單,右邊展示對(duì)應(yīng)頁(yè)面功能。

這種對(duì)于頁(yè)面層級(jí)不深的其實(shí)是非常直觀的,但是如果在該頁(yè)面下某些二級(jí)入口甚至三級(jí)入口權(quán)限控制就會(huì)略顯混亂,會(huì)比較建議使用樹(shù)形結(jié)構(gòu)處理。

順便提一句,后臺(tái)設(shè)計(jì)盡量不要讓頁(yè)面層次太深了,這對(duì)用戶(hù)使用并不友好。如果這么做,那么使用多級(jí)菜單導(dǎo)航或者關(guān)閉式標(biāo)簽導(dǎo)航可能是一種解決方式。

有一些需要注意的點(diǎn):

1. 超級(jí)管理員

為了便于管理,在當(dāng)前系統(tǒng)中配置了一個(gè)超級(jí)管理員角色,就是這個(gè)角色系統(tǒng)里面什么都能干;這個(gè)角色下通常只有一個(gè)超管,只有這個(gè)超管才能做權(quán)限管理,其他角色是不可的。

這一點(diǎn)在不復(fù)雜的系統(tǒng)中,是一種便捷管理方式。更復(fù)雜系統(tǒng)需要考慮不同層級(jí)管理員、考慮角色互斥、角色繼承這些問(wèn)題。

2. 角色禁用啟用以及刪除

禁用啟用都會(huì)影響到這個(gè)角色下所有用戶(hù)的使用,這點(diǎn)需要注意。在處理這些敏感的操作時(shí)候,一定要做二次確認(rèn)。

在刪除時(shí),還需要判斷下當(dāng)前角色有用戶(hù)時(shí)是否能夠刪除。能刪除則用戶(hù)怎么處理,不能刪除怎么提示。

一種做法是,可以刪除但刪除后如果用戶(hù)賦予的角色會(huì)為空,再登錄時(shí)候會(huì)對(duì)應(yīng)提示;另外一種做法是要先清空用戶(hù)才能刪除角色。

3. 單角色

RBAC告訴我們一個(gè)用戶(hù)可以有多個(gè)角色,但是我這里處理為一個(gè)用戶(hù)只有一個(gè)角色。實(shí)際上可以做多個(gè)角色,但是沒(méi)有必要,因?yàn)槲覀兊臉I(yè)務(wù)是單線(xiàn)的,每個(gè)角色各司其職。

如果是多角色,從我做過(guò)系統(tǒng)看,一個(gè)是做好角色的互斥,比如說(shuō)某項(xiàng)業(yè)務(wù)的申請(qǐng)和審批不要分配到同一個(gè)人上;一個(gè)是一次只能獲取一個(gè)角色,登錄進(jìn)入系統(tǒng),第一個(gè)就是要選擇角色。

如果處理更好那就首次登錄選擇,再次登錄記住上次即可,并且支持在個(gè)人設(shè)置中自由切換。

4. 默認(rèn)角色

這里商家其實(shí)是默認(rèn)角色,它不可刪除。這么做是因?yàn)樯碳夷承╉?yè)面字段顯示與其他角色是不一樣的,屬于數(shù)據(jù)權(quán)限范疇。但是如果單獨(dú)細(xì)化數(shù)據(jù)權(quán)限到字段,投入產(chǎn)出比那真的是劃不著,所以直接在角色中寫(xiě)死了。在實(shí)際場(chǎng)景中,角色和身份是可以是對(duì)等的,比如做校園自然就有教師、學(xué)生、家長(zhǎng)角色,這一類(lèi)角色實(shí)際是是可以作為默認(rèn)固定角色而不需要再創(chuàng)建。

用戶(hù)管理

添加角色以后,我們就可以去用戶(hù)管理中管理用戶(hù),頁(yè)面如下:

在添加或編輯用戶(hù)時(shí)候我們就會(huì)給用戶(hù)設(shè)置角色。這里可能需要注意點(diǎn)有:

(1)用戶(hù)名

根據(jù)實(shí)際需求去規(guī)定用戶(hù)名,可以是郵箱可以是手機(jī)號(hào),也可以是正常的字母+數(shù)字的組合。

當(dāng)前系統(tǒng)使用是數(shù)字+字母的賬號(hào),那么在你忘記密碼時(shí)候,如果不綁定手機(jī)號(hào)或郵箱還是無(wú)法自己找回的。在當(dāng)前業(yè)務(wù)條件下,登錄頁(yè)直接給了個(gè)聯(lián)系管理員的提示,由管理員重置密碼。

(2)密碼

通常會(huì)有個(gè)初始密碼,為了保證系統(tǒng)安全性,最好首次進(jìn)入強(qiáng)制修改。如果忘記密碼需要管理員重置,那需要一個(gè)重置的功能,點(diǎn)擊二次確認(rèn)后重置為初始密碼。也可以是帶輸入框彈窗,輸入為任意符合規(guī)則的密碼。

(3)關(guān)聯(lián)商家

可以理解為這是對(duì)數(shù)據(jù)權(quán)限的控制手段。在實(shí)際的后臺(tái)權(quán)限管理中,有些數(shù)據(jù)權(quán)限是根據(jù)組織架構(gòu)做了限制,有些角色去配置,有些根據(jù)用戶(hù)組,而有些則是根據(jù)賬號(hào)單獨(dú)去配置。所以在做數(shù)據(jù)權(quán)限時(shí)候,要具體問(wèn)題具體分析,而不是別人的一定合適。

在當(dāng)前系統(tǒng)中,實(shí)際默認(rèn)有兩類(lèi)用戶(hù),一個(gè)是平臺(tái)的,如平臺(tái)運(yùn)營(yíng)、財(cái)務(wù);一個(gè)是供應(yīng)商(商家),那么平臺(tái)對(duì)應(yīng)的數(shù)據(jù)范圍是全部數(shù)據(jù),而商家對(duì)應(yīng)的數(shù)據(jù)范圍是自己的。

在做權(quán)限之前,在商戶(hù)管理中,添加商戶(hù)時(shí)候默認(rèn)會(huì)添加一個(gè)商戶(hù)賬號(hào),實(shí)際已經(jīng)做了數(shù)據(jù)隔離,但是統(tǒng)一權(quán)限管理后,添加用戶(hù)并且配了商家角色,實(shí)際上并不知道這個(gè)用戶(hù)管理的是哪個(gè)商家,那就需要用戶(hù)和商家中做個(gè)鏈接。

(4)投放限制

是某種特殊的數(shù)據(jù)限制,進(jìn)一步說(shuō)明對(duì)單個(gè)賬號(hào)配置必要性。

比如如果做廣告,只允許某用戶(hù)投放某些區(qū)域;再比如做校園管理系統(tǒng)中,指派班級(jí)學(xué)生助理對(duì)特定班級(jí)成員的管理(也可以通過(guò)組織架構(gòu)做數(shù)據(jù)權(quán)限控制,如果有下篇可以討論下)。

我做的是社區(qū)電商后臺(tái),是自帶社區(qū)限制屬性的,有些商家只能投放一個(gè)社區(qū),有些商家則能投放多個(gè)社區(qū)。

權(quán)限配置

更準(zhǔn)確的說(shuō),是菜單和規(guī)則的配置。不是必須的,但是建議能夠在前端頁(yè)面中配置。

我負(fù)責(zé)的系統(tǒng)是php寫(xiě)的,權(quán)限是后面增加,所以開(kāi)發(fā)在修改時(shí)候,每個(gè)功能按鈕都做了個(gè)if判斷,還好頁(yè)面和功能不多,不然開(kāi)發(fā)估計(jì)要哭。

所以這個(gè)并不是合理方式。

在其他系統(tǒng)中,則采用的是通過(guò)url結(jié)合api做的頁(yè)面和功能控制,有優(yōu)點(diǎn)也有缺點(diǎn),本文不進(jìn)行深入討論。

當(dāng)然我也無(wú)力探究不同的語(yǔ)言如何實(shí)現(xiàn)權(quán)限管理,因?yàn)槲衣?tīng)不懂。不過(guò)理解下正在做的系統(tǒng)如何實(shí)現(xiàn)的對(duì)于非技術(shù)出身產(chǎn)品經(jīng)理而言,則是一種有益學(xué)習(xí)過(guò)程。

通過(guò)權(quán)限配置,我們能夠比較靈活的調(diào)整菜單或者功能,比如調(diào)整個(gè)菜單位置配置個(gè)菜單icon,不需要讓開(kāi)發(fā)的伙伴去動(dòng)下代碼,能讓他們少掉幾根頭發(fā)。

此外,操作日志是一個(gè)必不可少的模塊,它是對(duì)訪(fǎng)問(wèn)控制一個(gè)補(bǔ)充,記錄了整體系統(tǒng)中所有的行為。特別是在角色中沒(méi)有控制“只能操作自己內(nèi)容”時(shí),就會(huì)變得尤為重要。

我現(xiàn)在處理這個(gè)系統(tǒng)權(quán)限問(wèn)題時(shí)候,并沒(méi)有在角色的維度上去控制數(shù)據(jù)權(quán)限,而是根據(jù)實(shí)際業(yè)務(wù)在用戶(hù)的維度去控制了數(shù)據(jù)權(quán)限。舉一個(gè)例子,比如說(shuō),AB都是商家角色,都能對(duì)某個(gè)商家進(jìn)行管理。如果二者數(shù)據(jù)權(quán)限做了控制,那么A只能編輯自己錄入商品,B只能編輯自己錄入商品。如果沒(méi)有控制,那么AB都可以編輯彼此錄入商品,要是誤操作這就不知道是誰(shuí)干的了。在這種情況下,有日志就能知道誰(shuí)進(jìn)行了對(duì)應(yīng)的操作,避免無(wú)法追溯問(wèn)題源頭。

理論溯源

理論是實(shí)踐的基礎(chǔ)。雖然枯燥,還是有必要提一下整個(gè)RBAC模型的發(fā)展脈絡(luò)。

產(chǎn)品經(jīng)理社區(qū)乃至各大技術(shù)社區(qū)對(duì)于RBAC的介紹和說(shuō)明已經(jīng)有很多,挑了以下兩篇我覺(jué)得說(shuō)的很清楚文章,看完就基本知道RBAC是整個(gè)模型是什么了,感謝二位分享。

RBAC權(quán)限管理模型:基本模型及角色模型解析及舉例??http://www.codemsi.com/pd/440765.html

總結(jié):SAAS后臺(tái)權(quán)限設(shè)計(jì)案例分析??http://www.codemsi.com/pd/2310691.html

同時(shí)我也結(jié)合了自己了解和理解資料,做了一個(gè)理論梳理。特別是最上面訪(fǎng)問(wèn)控制技術(shù)發(fā)展有興趣的可以進(jìn)一步探索下,就不貼什么枯燥的概念解釋了。實(shí)在能力有限,有些是真的看不太懂。

值得一提的是,人們習(xí)慣用百度谷歌等搜索引擎去獲取專(zhuān)業(yè)信息,而很多學(xué)術(shù)論文中的一些整體解決方案往往被忽視。

學(xué)術(shù)上這種理論與實(shí)踐結(jié)合研究可能滯后于現(xiàn)實(shí)發(fā)展的(因?yàn)樾碌膶?shí)踐提升到理論的視角是需要時(shí)間積累),但是對(duì)于從未接觸過(guò)人群,這類(lèi)論文卻提供了一種方法論的思路。

是的,你們找不到答案的時(shí)候不妨查一下CNKI?!獑T外

結(jié)束語(yǔ)

1. 權(quán)限管理是系統(tǒng)的基礎(chǔ)功能,在最初規(guī)劃時(shí)候就要考慮到每個(gè)行為都能找到是誰(shuí)干的。

2. 訪(fǎng)問(wèn)控制實(shí)際是復(fù)雜的,解決方式也是多樣的。不用一味追求完善,在有限的資源內(nèi)選擇最合適自己的更重要。

最后,如有不足或者錯(cuò)誤地方歡迎指正。計(jì)劃是能由簡(jiǎn)單到復(fù)雜復(fù)盤(pán)下自己做訪(fǎng)問(wèn)控制踩過(guò)的坑,希望有下一篇,立個(gè)flag

 

本文由 @員外丁 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來(lái)自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 是的,你們找不到答案的時(shí)候不妨查一下CNKI?!獑T外,這句話(huà)真妙哈哈哈

    來(lái)自廣東 回復(fù)