前言權(quán)限管理是所有后臺系統(tǒng)的都會涉及的一個(gè)重要組成部分,主要目的是對不同的人訪問資源進(jìn)行權(quán)限的控制,避免因權(quán)限控制缺失或操作不當(dāng)引發(fā)的風(fēng)險(xiǎn)問題,如操作錯誤,隱私數(shù)據(jù)泄露等問題。 目前在公司負(fù)責(zé)權(quán)限這塊,所以對權(quán)限這塊的設(shè)計(jì)比較熟悉,公司采用微服務(wù)架構(gòu),權(quán)限系統(tǒng)自然就獨(dú)立出來了,其他業(yè)務(wù)系統(tǒng)包括商品中心,訂單中心,用戶中心,倉庫系統(tǒng),小程序,多個(gè)APP等十幾個(gè)系統(tǒng)和終端 1.權(quán)限模型迄今為止最為普及的權(quán)限設(shè)計(jì)模型是RBAC模型,基于角色的訪問控制(Role-Based Access Control) 1.1 RBAC0模型RBAC0模型如下: 這是權(quán)限最基礎(chǔ)也是最核心的模型,它包括用戶/角色/權(quán)限,其中用戶和角色是多對多的關(guān)系,角色和權(quán)限也是多對多的關(guān)系。 用戶是發(fā)起操作的主體,按類型分可分為2B和2C用戶,可以是后臺管理系統(tǒng)的用戶,可以是OA系統(tǒng)的內(nèi)部員工,也可以是面向C端的用戶,比如阿里云的用戶。 角色起到了橋梁的作用,連接了用戶和權(quán)限的關(guān)系,每個(gè)角色可以關(guān)聯(lián)多個(gè)權(quán)限,同時(shí)一個(gè)用戶關(guān)聯(lián)多個(gè)角色,那么這個(gè)用戶就有了多個(gè)角色的多個(gè)權(quán)限。 有人會問了為什么用戶不直接關(guān)聯(lián)權(quán)限呢?在用戶基數(shù)小的系統(tǒng),比如20個(gè)人的小系統(tǒng),管理員可以直接把用戶和權(quán)限關(guān)聯(lián),工作量并不大,選擇一個(gè)用戶勾選下需要的權(quán)限就完事了。 但是在實(shí)際企業(yè)系統(tǒng)中,用戶基數(shù)比較大,其中很多人的權(quán)限都是一樣的,就是個(gè)普通訪問權(quán)限,如果管理員給100人甚至更多授權(quán),工作量巨大。 這就引入了'角色(Role)'概念,一個(gè)角色可以與多個(gè)用戶關(guān)聯(lián),管理員只需要把該角色賦予用戶,那么用戶就有了該角色下的所有權(quán)限,這樣設(shè)計(jì)既提升了效率,也有很大的拓展性。 權(quán)限是用戶可以訪問的資源,包括頁面權(quán)限,操作權(quán)限,數(shù)據(jù)權(quán)限:
以上是RBAC的核心設(shè)計(jì)及模型分析,此模型也叫做RBAC0,而基于核心概念之上,RBAC還提供了擴(kuò)展模式。 包括RBAC1,RBAC2,RBAC3模型。下面介紹這三種類型 1.2 RBAC1模型此模型引入了角色繼承(Hierarchical Role)概念,即角色具有上下級的關(guān)系,角色間的繼承關(guān)系可分為一般繼承關(guān)系和受限繼承關(guān)系。 一般繼承關(guān)系僅要求角色繼承關(guān)系是一個(gè)絕對偏序關(guān)系,允許角色間的多繼承。 而受限繼承關(guān)系則進(jìn)一步要求角色繼承關(guān)系是一個(gè)樹結(jié)構(gòu),實(shí)現(xiàn)角色間的單繼承。 這種設(shè)計(jì)可以給角色分組和分層,一定程度簡化了權(quán)限管理工作。 1.3 RBAC2模型基于核心模型的基礎(chǔ)上,進(jìn)行了角色的約束控制,RBAC2模型中添加了責(zé)任分離關(guān)系,其規(guī)定了權(quán)限被賦予角色時(shí),或角色被賦予用戶時(shí),以及當(dāng)用戶在某一時(shí)刻激活一個(gè)角色時(shí)所應(yīng)遵循的強(qiáng)制性規(guī)則。 責(zé)任分離包括靜態(tài)責(zé)任分離和動態(tài)責(zé)任分離。 主要包括以下約束:
1.4 RBAC3模型即最全面的權(quán)限管理,它是基于RBAC0,將RBAC1和RBAC2進(jìn)行了整合 1.5 用戶組當(dāng)平臺用戶基數(shù)增大,角色類型增多時(shí),而且有一部分人具有相同的屬性,比如財(cái)務(wù)部的所有員工,如果直接給用戶分配角色,管理員的工作量就會很大,如果把相同屬性的用戶歸類到某用戶組,那么管理員直接給用戶組分配角色,用戶組里的每個(gè)用戶即可擁有該角色,以后其他用戶加入用戶組后,即可自動獲取用戶組的所有角色,退出用戶組,同時(shí)也撤銷了用戶組下的角色,無須管理員手動管理角色。 根據(jù)用戶組是否有上下級關(guān)系,可以分為有上下級的用戶組和普通用戶組:
每個(gè)公司都會涉及到到組織和職位,下面就重點(diǎn)介紹這兩個(gè)。 1.5.1 組織常見的組織架構(gòu)如下圖: 我們可以把組織與角色進(jìn)行關(guān)聯(lián),用戶加入組織后,就會自動獲得該組織的全部角色,無須管理員手動授予,大大減少工作量,同時(shí)用戶在調(diào)崗時(shí),只需調(diào)整組織,角色即可批量調(diào)整。組織的另外一個(gè)作用是控制數(shù)據(jù)權(quán)限,把角色關(guān)聯(lián)到組織,那么該角色只能看到該組織下的數(shù)據(jù)權(quán)限。 1.5.2 職位假設(shè)財(cái)務(wù)部的職位如下圖: 每個(gè)組織部門下都會有多個(gè)職位,比如財(cái)務(wù)部有總監(jiān),會計(jì),出納等職位,雖然都在同一部門,但是每個(gè)職位的權(quán)限是不同的,職位高的擁有更多的權(quán)限。總監(jiān)擁有所有權(quán)限,會計(jì)和出納擁有部分權(quán)限。 特殊情況下,一個(gè)人可能身兼多職。 1.6 含有組織/職位/用戶組的模型根據(jù)以上場景,新的權(quán)限模型就可以設(shè)計(jì)出來了,如下圖:
2.授權(quán)流程授權(quán)即給用戶授予角色,按流程可分為手動授權(quán)和審批授權(quán)。權(quán)限中心可同時(shí)配置這兩種,可提高授權(quán)的靈活性。
3.表結(jié)構(gòu)有了上述的權(quán)限模型,設(shè)計(jì)表結(jié)構(gòu)就不難了,下面是多系統(tǒng)下的表結(jié)構(gòu),簡單設(shè)計(jì)下,主要提供思路: 4.權(quán)限框架
在項(xiàng)目中可以采用其中一種框架,它們的優(yōu)缺點(diǎn)以及如何使用會在后面的文章中詳細(xì)介紹. 5.結(jié)語權(quán)限系統(tǒng)可以說是整個(gè)系統(tǒng)中最基礎(chǔ),同時(shí)也可以很復(fù)雜的,在實(shí)際項(xiàng)目中,會遇到多個(gè)系統(tǒng),多個(gè)用戶類型,多個(gè)使用場景,這就需要具體問題具體分析,但最核心的RBAC模型是不變的,我們可以在其基礎(chǔ)上進(jìn)行擴(kuò)展來滿足需求。 最后,如果您覺得這篇文章對您有幫助,可以點(diǎn)個(gè)贊,謝謝支持!
|
|
|