大話《權限設計》全篇,領略不同設計模式的魅力
說明
該文章是屬于OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。
該系統文章,我會盡量說的非常詳細,做到不管新手、老手都能看懂。
說明:OverallAuth2.0 是一個簡單、易懂、功能強大的權限+可視化流程管理系統。
友情提醒:本篇文章是屬于系列文章,看該文章前,建議先看之前文章,可以更好理解項目結構。
qq群:801913255,進群有什么不懂的盡管問,群主都會耐心解答。

關注我,學不會你來打我
注意:該文章是理論篇,后面會有開發的全過程。有興趣的朋友,請關注我吧(*^▽^*)。
01 系統權限的劃分
通常來說,一個系統權限的劃分,主要分位2大類:功能級權限和數據級權限。那么它們是如何分類的,我們看下圖。

02 權限的設計模式有哪些
了解了一個系統的權限劃分后,那么我們要如何去規劃,設計這些權限。盡量減少系統權限的維護成本和權限的耦合度。是開發人員一直面臨的嚴峻問題。
據我的了解,目前比較流行的權限設計模式有以下四種。

通過上圖,我們可以了解到權限的設計模式分為那四種,那么接下來我們就用《小說》的形式,分別講一下這四種模式的使用場景及實現過程。
03 ACL基于用戶的權限設計
乘風是一家創業公司的開發人員,由于是創業公司,規模不大,研發人員也只有可憐的3人,平時面臨的研發任務非常緊張。某天的傍晚,乘風狠狠地伸了個懶腰,環顧四周空蕩蕩的座位。正準備收拾東西回家的時候,老板叫住了他。小乘,怎么財務的小紅能看到運營的數據,可以讓不同的人查看不同的數據嘛。乘風的老板也不怎么懂技術,需求就說了一句:讓不同的人員看到不同的數據。乘風自信的回答道:可以的老板。第二天,乘風就根據老板的需求基于ACL整理出了一套權限管理的方案。

以上就是乘風基于ACL設計的權限。可以看出菜單和人員直接掛鉤,可以簡單有效的做到每個員工訪問不同的菜單,從而實現老板的需求。
04 RABC基于角色的權限設計
4.1角色權限
隨著時間的推移,公司也處于快速發展階段,終于在2年后的某一天。公司老板找到已經是研發組長的乘風說道:小乘啊,今天早上運營給我說,他們現在每天花在分配人員權限上的時間過多,每次有人員變動、人員加入都需要重新調整權限,而且不能成批量操作,大大降低了他們的工作效率。你看有什么辦法解決這個問題沒有。
乘風一聽,毫不猶豫的說道。有的老板,明天我給你出一個方案。
老板一聽很高興,拍了拍乘風的肩膀離開了,他非常欣賞乘風這種辦事風格,干凈利落,總能解決問題。
乘風的自信來源于他一復一日的學習和專研。他明白用RABC就能完美解決老板的需求。于是他在第二天就做出了如下方案設計


上述2張圖它的授權結果是一樣的,但是很明顯基于RABC的授權方式更加靈活。原因在于乘風在人員和權限之間抽象出一個角色層,這樣不僅能減少系統之間的耦合,還能大大降低運營人員的運維時間。
為什么這么說,舉一個簡單的例子:當【權限4】這塊權限不想讓任何人使用,那么在RABC中,我只需要把它從【角色3】中移除即可。反觀ACL就比較麻煩,需要先后移除人員1和人員3的權限。試想一下這是3個員工,如果是10個100個,得有多麻煩。
很快乘風的方案得到了老板的肯定,并且給他升職加薪。
4.2 角色等級權限
這種設計模式很快就實現并用于系統之中,也確實大大解決了很多實際性問題。然而好景不長,公司在接下來的時間中,發展的越來越快,規模越來越大。這種設計方式也出現了和ACL同樣的問題。當用戶權限分的很細的時候,幾乎每個用戶都對應一個角色。似乎又回到了幾年前ACL設計模式的樣子。
于是乘風通過不斷地對系統的分析和對技術的專研,希望能從其中得到有效的解決辦法。
可能是日有所思,夜有所夢。在某一天的晚上,乘風在睡夢中得到了解決辦法。他夢見。。。把之前設定的角色制定了等級。也就是說高等級的角色會繼承低等級角色的所有權限。
得到答案的乘風,也不困了,來不及穿衣服褲子。就這樣穿著一條大褲衩打開電腦,畫出了如下設計方案。

你沒看錯,其實就是和組織機構類似,那么我們如何實現呢?請看下圖

可以看到【角色1-2】它是繼承了【角色1-2-1】的所有權限。根據這一原理,我們不用在為【角色1-2】單獨在賦予權限3和權限4。
啊嚏,乘風摸了摸鼻子。一個噴嚏讓他在意識到自己全身上下就只剩一條大褲衩。看著設計方案乘風淡淡的說了一句。
難道我真的是天才?隨后就進入夢鄉。
05 ABAC基于屬性的權限設計
歲月悠悠,人生如夢,轉眼間又過去了幾年。乘風也不再年輕,不是當前剛進公司的小白,但也正是如此。他仿佛失去了當年對技術的向往和專研熱情,因為他總覺得自己的技術已經處于很高的水平。直到有一天,老板又找到了他。
小乘,老板推開乘風的辦公室,見乘風正在泡茶,眉頭稍稍一皺,但隨后很快就消失。
老板,乘風沒有發現老板的異常,起身道
小乘,昨天我去財務部視察的時候發現,財務部的小李居然能看到我們公司所有員工的工資。按道理說除了財務經理有權限查看之外,財務部下面的人應該都不具備查看員工工資的權限。
還有人事部的小張,他怎么能隨意查看公司領導層的人事資料,甚至能隨意修改,這不是胡鬧嘛?
你是研發部的負責人,你應該考慮考慮,系統的數據安全,那寫人能看什么數據,能修改什么數據,要做到可調控。
接下來的時間中,乘風老板和他聊了很多。大多數都是圍繞數據安全的問題展開。
對了,你的茶具還挺全,整的不錯。走到門口的老板,忽然轉身對乘風說道。
老板最后的話,讓乘風陷入了深深的沉思之中。
回憶過去自己,從一開始的積極提升能力到如今的懈怠、自滿,內心有一種說不出的感覺。
今天老板的話,讓他意識到很多。總結后的乘風,下定決心要找回自己,然后根據老板簡述的需求,總結如下
1:不同的人需要查看不同的數據,做到可調控。

2:不同的人對數據有不同的操作權限,做到可調控。

這些問題的出現,讓乘風很是頭疼,不知從何下手。于是他仿佛回到過去的自己,努力查閱資料,提升技能。
終于得到了一個有效的解決辦法。那就是ABAC基于屬性的權限設計也就是說ABAC可以通過動態計算一個或者一組屬性來進行權限控制。
那么ABAC屬性大致分位哪些?

得到答案的乘風,馬上著手設計ABAC基于屬性的權限設計。很快就完成權限系統的迭代。
隨著了解的越多,乘風也開始總結自身存在的問題。之前哪點對自己技術的自信,現在看來就是自負和自滿。技術沒有頂峰,只有不斷的求知、探索。
06 RABC+ABAC的權限設計
這個不必多說,就是字面的意思。我們的OverallAuth2.0就使用RABC+ABAC的權限設計。
以上就是本篇文章的全部內容,感謝耐心觀看
后端WebApi 預覽地址:http://139.155.137.144:8880/swagger/index.html
前端vue 預覽地址:http://139.155.137.144:8881
關注公眾號:發送【權限】,獲取前后端代碼
有興趣的朋友,請關注我微信公眾號吧(*^▽^*)。

關注我:一個全棧多端的寶藏博主,定時分享技術文章,不定時分享開源項目。關注我,帶你認識不一樣的程序世界

浙公網安備 33010602011771號