迄今為止最為普及的權(quán)限設(shè)計模型是RBAC模型,基于角色的訪問控制(Role-Based Access Control)
1 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)系,每個角色可以關(guān)聯(lián)多個權(quán)限,同時一個用戶關(guān)聯(lián)多個角色,那么這個用戶就有了多個角色的多個權(quán)限。有人會問了為什么用戶不直接關(guān)聯(lián)權(quán)限呢?在用戶基數(shù)小的系統(tǒng),比如20個人的小系統(tǒng),管理員可以直接把用戶和權(quán)限關(guān)聯(lián),工作量并不大,選擇一個用戶勾選下需要的權(quán)限就完事了戳玫。
但是在實際企業(yè)系統(tǒng)中,用戶基數(shù)比較大,其中很多人的權(quán)限都是一樣的,就是個普通訪問權(quán)限,如果管理員給100人甚至更多授權(quán),工作量巨大幌蚊。這就引入了"角色(Role)"概念,一個角色可以與多個用戶關(guān)聯(lián),管理員只需要把該角色賦予用戶,那么用戶就有了該角色下的所有權(quán)限,這樣設(shè)計既提升了效率,也有很大的拓展性谤碳。
權(quán)限是用戶可以訪問的資源,包括頁面權(quán)限,操作權(quán)限,數(shù)據(jù)權(quán)限:
頁面權(quán)限:
即用戶登錄系統(tǒng)可以看到的頁面,由菜單來控制,菜單包括一級菜單和二級菜單,只要用戶有一級和二級菜單的權(quán)限,那么用戶就可以訪問頁面
操作權(quán)限:
即頁面的功能按鈕,包括查看,新增,修改,刪除,審核等,用戶點擊刪除按鈕時,后臺會校驗用戶角色下的所有權(quán)限是否包含該刪除權(quán)限,如果是,就可以進行下一步操作,反之提示無權(quán)限。
有的系統(tǒng)要求"可見即可操作",意思是如果頁面上能夠看到操作按鈕,那么用戶就可以操作,要實現(xiàn)此需求,這里就需要前端來配合,前端開發(fā)把用戶的權(quán)限信息緩存,在頁面判斷用戶是否包含此權(quán)限,如果有,就顯示該按鈕,如果沒有,就隱藏該按鈕溢豆。某種程度上提升了用戶體驗,但是在實際場景可自行選擇是否需要這樣做
數(shù)據(jù)權(quán)限:
數(shù)據(jù)權(quán)限就是用戶在同一頁面看到的數(shù)據(jù)是不同的,比如財務(wù)部只能看到其部門下的用戶數(shù)據(jù),采購部只看采購部的數(shù)據(jù),在一些大型的公司,全國有很多城市和分公司,比如杭州用戶登錄系統(tǒng)只能看到杭州的數(shù)據(jù),上海用戶只能看到上海的數(shù)據(jù),解決方案一般是把數(shù)據(jù)和具體的組織架構(gòu)關(guān)聯(lián)起來.
舉個例子,再給用戶授權(quán)的時候,用戶選擇某個角色同時綁定組織如財務(wù)部或者合肥分公司,那么該用戶就有了該角色下財務(wù)部或合肥分公司下的的數(shù)據(jù)權(quán)限蜒简。
以上是RBAC的核心設(shè)計及模型分析,此模型也叫做RBAC0,而基于核心概念之上,RBAC還提供了擴展模式。包括RBAC1,RBAC2,RBAC3模型漩仙。下面介紹這三種類型
2 RBAC1模型
此模型引入了角色繼承(Hierarchical Role)概念,即角色具有上下級的關(guān)系,角色間的繼承關(guān)系可分為一般繼承關(guān)系和受限繼承關(guān)系搓茬。
一般繼承關(guān)系僅要求角色繼承關(guān)系是一個絕對偏序關(guān)系,允許角色間的多繼承队他。而受限繼承關(guān)系則進一步要求角色繼承關(guān)系是一個樹結(jié)構(gòu)垮兑,實現(xiàn)角色間的單繼承。這種設(shè)計可以給角色分組和分層漱挎,一定程度簡化了權(quán)限管理工作系枪。
3 RBAC2模型
基于核心模型的基礎(chǔ)上,進行了角色的約束控制,RBAC2模型中添加了責(zé)任分離關(guān)系,其規(guī)定了權(quán)限被賦予角色時磕谅,或角色被賦予用戶時私爷,以及當(dāng)用戶在某一時刻激活一個角色時所應(yīng)遵循的強制性規(guī)則雾棺。責(zé)任分離包括靜態(tài)責(zé)任分離和動態(tài)責(zé)任分離。
主要包括以下約束:
互斥角色:同一用戶只能分配到一組互斥角色集合中至多一個角色衬浑,支持責(zé)任分離的原則捌浩。互斥角色是指各自權(quán)限互相制約的兩個角色工秩。比如財務(wù)部有會計和審核員兩個角色,他們是互斥角色,那么用戶不能同時擁有這兩個角色,體現(xiàn)了職責(zé)分離原則
基數(shù)約束:一個角色被分配的用戶數(shù)量受限尸饺;一個用戶可擁有的角色數(shù)目受限;同樣一個角色對應(yīng)的訪問權(quán)限數(shù)目也應(yīng)受限助币,以控制高級權(quán)限在系統(tǒng)中的分配
先決條件角色:即用戶想獲得某上級角色,必須先獲得其下一級的角色
4 RBAC3模型
即最全面的權(quán)限管理,它是基于RBAC0,將RBAC1和RBAC2進行了整合