任何系統/產(chǎn)品搭建時(shí),好權最先考慮(′?`)的限管限管都應該是權限管理模塊,而且權限管理模塊的理設理清晰、穩定是計對平臺產(chǎn)品健康發(fā)展的基石,權限管理核心考慮的種不展開(kāi)問(wèn)題是用戶(hù)與權限的關(guān)系。本文作者對三種不同權限管(guan)理的同權版本展開(kāi)了梳理分析,與大家分享。版本
01 超簡(jiǎn)版本-┐(′?`)┌用戶(hù)/??權限模型用戶(hù)直接與權限映射,梳理這種設計的分析優(yōu)勢在于簡(jiǎn)潔直觀(guān),適合用戶(hù)數量不多,好權功能較為簡(jiǎn)單的限(╯°□°)╯管限管系統,它的理設理劣勢也是非常的( ?ω?)明顯當(′?_?`)用戶(hù)量增多時(shí),維護成本較高,計對???可擴展性差。種不展開(kāi)
系統頁(yè)面Demo:
02 進(jìn)階版本-用戶(hù)/角色/權限模型若系統用戶(hù)和功能增多,同權為每一個(gè)用戶(hù)匹配單獨的權限,會(huì )變得非常的繁瑣,因此權限分門(mén)別類(lèi),形成“權限包”。從用戶(hù)的角度,將用戶(hù)分類(lèi),同一類(lèi)用戶(hù)固定為相同的角色,賦予相同的權限,會(huì )讓操作變得簡(jiǎn)單很多?。
系統頁(yè)面Demo:
03 層級版本-組織/用戶(hù)/角色/權限模型對于管理性后臺,往往人員是職級區分的,比如用戶(hù)王五為銷(xiāo)售組長(cháng)??,其組員趙六和孫七,王五需要看到趙六和孫七的銷(xiāo)售額數據和可以進(jìn)行趙六和??孫七的所有操作,而趙六僅能看到自己的銷(xiāo)售額數據,進(jìn)行和自己相關(guān)的操作。
這個(gè)事(shi)例中引入了兩個(gè)新的概念,一是用戶(hù)的權限可以細分為功能權限和數據范圍權限,二是數據范圍和功能權限都有(you)了繼承的層級概念。
所謂功能權限大家比較好理(′▽?zhuān)?解,比如能否看到某個(gè)頁(yè)面,能(╬?益?)否點(diǎn)擊某個(gè)按鈕。而數據權限略抽象些,比如在業(yè)(′?_?`)績(jì)報表模塊,從功能權限角度,可以決定用戶(hù)能否打開(kāi)這個(gè)報表頁(yè)面,但是不(′?_?`)同用戶(hù)進(jìn)(jin)來(lái)看到不同的數據(王五需要看到趙六和孫七的銷(xiāo)售額數據,而趙六僅能看到自己的銷(xiāo)售額數據,看不到孫七的),則是由數據范圍來(lái)控制的。
1. 數據范圍的繼承我們可以將用戶(hù)進(jìn)行分級管理,比如建立多層級的組織架構(???)樹(shù),將不同用戶(hù)放置于組織架構的不同根節點(diǎn)上,來(lái)實(shí)現多層級用戶(hù)的建立和管理。
1)如果用戶(hù)的層級如果比較簡(jiǎn)單(不??多于三級),可??以將層級關(guān)系融入到角色之中。比如用戶(hù)分為三級:管理員(?Д?)-組長(cháng)-組員,管理員能看到全部的數據范圍和擁有全部的功能權限,而組(zu)長(cháng)能查看組員的數據范圍和擁有部分功ヽ(′ー`)ノ能權限(比如無(wú)法編輯用戶(hù)(°o°)),而組員的數據范圍僅僅為自己負責的數據和擁有部分功能權限。
我們可(?????)以在組長(cháng)這個(gè)角色下,允許其綁定組員,針對不同的角色設置不(°ロ°) !同的數據范圍讀取方式,管理員( ?° ?? ?°)可以讀取全部數據范圍,組(zu)長(cháng)需要讀取其組(zu)員的,組(′?_?`)員只能讀取自己的。大家有興趣可以去了解下RBAC0/1模型
2)而對于用戶(hù)層??級較多的情況,建議采用多層ヽ(′ー`)ノ級的組織架構的管理模式,先建立公司(′?_?`)的組織部門(mén),再將人置于組織架構樹(shù)的不同(′▽?zhuān)?節點(diǎn)之下。以用戶(hù)在組織節點(diǎn)的位(′?_?`)置,以及是否為某個(gè)節點(diǎn)組織的負責人,來(lái)確定其數據范圍。
2. 功能權限的繼承一般是將角色進(jìn)行分級,有了所謂的角色樹(shù)的概念
由此,我們就得到了自由度更高但是邏輯更復雜的權限管理
涉及到組織架構樹(shù)和角色樹(shù),需要考慮到的場(chǎng)景更多,這些細節要根據實(shí)際的業(yè)務(wù)場(chǎng)景來(lái)制(zhi)定方案。比如:
組織有成立和解散的時(shí)間,員工也存在轉崗換組織部門(mén)的情況,因此要考慮引入時(shí)間??軸的概念。增加很多的校驗邏輯,比如需要增加員工入職、離職時(shí)間,且員工在該部門(mén)任職的時(shí)間不能早于部門(mén)成立的時(shí)間等等同一員工(′▽?zhuān)?)能否兼崗,允許在多個(gè)組織下存在角色上是??否會(huì )有(′▽?zhuān)?)互斥情況存在(RBAC-2模型),比如實(shí)際(ji)業(yè)務(wù)中,發(fā)鈔和驗鈔的工作不允許同一個(gè)人做,因此在功能設計時(shí)要考慮角色之間的互斥性,通過(guò)為用戶(hù)配置角色來(lái)實(shí)現用戶(hù)與權限的映射關(guān)系,不同權限間是存在優(yōu)先級的,比如剛剛的例子,互斥關(guān)系為最高優(yōu)先級系統頁(yè)面Demo:
上述分析的三種權限管??理其實(shí)并無(wú)優(yōu)劣之??分。權限管理作為系統的基石,應依據系統目標用戶(hù)特點(diǎn)、后續發(fā)展方向、維護成本等方面進(jìn)行綜合評估,找到最適合系統的模式即可。
知識點(diǎn)總結用戶(hù)管理核心是解決用戶(hù)與權限的問(wèn)題;角色可理解為一類(lèi)用戶(hù)??,或者一堆權ヾ(′ω`)?限的集合,鏈接了用戶(hù)與權限的關(guān)系;權限(xian)可以分為功能權限和數據范圍;復雜的繼承關(guān)系,數據范圍依賴(lài)用戶(hù)組織架構樹(shù),功能權限依賴(lài)角色樹(shù),將用戶(hù)放置于組??織架構樹(shù)的不同節點(diǎn)上,并賦予角色,即解決了功能權限和數據范圍的問(wèn)題;