幾乎任何一個(gè)后臺(tái)引几,都會(huì)涉及到權(quán)限管理丹允,哪些人(用戶)有能夠登陸航瞭,能夠操作哪些東西(權(quán)限)彤恶。
基于角色的訪問控制方法(Role-Based Access Control,簡稱RBAC)是目前公認(rèn)的解決大型企業(yè)的統(tǒng)一資源訪問控制的有效方法筝野。其顯著的兩大特征是:
1、減小授權(quán)管理的復(fù)雜性粤剧,降低管理開銷;
2挥唠、靈活地支持企業(yè)的安全策略抵恋,并對企業(yè)的變化有很大的伸縮性。
RBAC的基本思路
RBAC-0是基于角色的訪問控制方法的最基礎(chǔ)的模型宝磨,在原來的“用戶-權(quán)限”結(jié)構(gòu)中加入“角色”的概念弧关,變成“用戶-角色-權(quán)限”結(jié)構(gòu)。
相應(yīng)的權(quán)限管理模塊和功能如下:
用戶管理
提供用戶賬戶的創(chuàng)建唤锉、編輯世囊、啟用、停用窿祥、刪除的功能株憾。具體依賴于郵箱、手機(jī)號或其他信息創(chuàng)建賬號晒衩,根據(jù)各公司實(shí)際情況而定嗤瞎。
角色管理
角色管理包含了用戶&角色的關(guān)聯(lián)、角色&權(quán)限的關(guān)聯(lián)管理听系,主要包括以下功能:
1贝奇、角色的創(chuàng)建、編輯靠胜、刪除的功能掉瞳,
2毕源、角色下用戶的添加和刪除
3、角色權(quán)限的配置功能
這種結(jié)構(gòu)中陕习,創(chuàng)建不同的角色霎褐,將權(quán)限直接賦予角色,用戶只需關(guān)聯(lián)角色即可獲得該角色的所對應(yīng)的權(quán)限衡查。這樣做的好處是:
1瘩欺、不用每個(gè)用戶都設(shè)置一遍權(quán)限,只需設(shè)置角色的權(quán)限拌牲。
2俱饿、用戶角色變化時(shí),比如 從銷售轉(zhuǎn)崗到產(chǎn)品塌忽,只需將用戶的角色做變更拍埠,相應(yīng)的權(quán)限就會(huì)變更。
除了RBAC-0之外土居,還有RBAC-1枣购、RBAC-2、RBAC-3擦耀,會(huì)放在文末供大家了解棉圈,為避免影響文章邏輯,在此不做詳述眷蜓。
數(shù)據(jù)權(quán)限是功能權(quán)限的延伸
常見的權(quán)限需求有兩類:功能權(quán)限和數(shù)據(jù)權(quán)限分瘾。
功能權(quán)限
1、菜單級別的權(quán)限:可見性
2吁系、頁面元素級別權(quán)限:可操作性
比如上面舉例的DBAC-0的設(shè)計(jì)方案就屬于功能權(quán)限德召,對于一級菜單和二級菜單來說,如果沒有權(quán)限汽纤,就不展示該菜單上岗,即可見性;對于權(quán)限明細(xì)來說蕴坪,如果沒有該權(quán)限肴掷,則操作時(shí)報(bào)錯(cuò),比如點(diǎn)擊時(shí)toast提示“對不起背传,您沒有該操作權(quán)限”捆等,即可操作性。
數(shù)據(jù)權(quán)限
數(shù)據(jù)權(quán)限簡單說就是功能給你用续室,數(shù)據(jù)不給看栋烤。比如,查看銷售記錄的功能挺狰,用戶A和B都有權(quán)限使用明郭,但A有權(quán)看到公司所有人的买窟,B只能看到他自己的銷售記錄。這就涉及到數(shù)據(jù)權(quán)限的控制了薯定。
涉及數(shù)據(jù)權(quán)限的權(quán)限管理需求會(huì)比單純的功能權(quán)限復(fù)雜一些始绍,但數(shù)據(jù)權(quán)限的依賴于功能權(quán)限,是對功能權(quán)限的進(jìn)一步描述话侄,說明角色在指定的功能點(diǎn)上的數(shù)據(jù)控制權(quán)限亏推。
角色的數(shù)據(jù)權(quán)限管理
首先,有一個(gè)約定年堆,為了降低開發(fā)成本吞杭,數(shù)據(jù)權(quán)限一般采用“沒有明確規(guī)定即視為有效”的原則,如果沒有定義功能的數(shù)據(jù)權(quán)限变丧,則說明該角色具有該功能的全部權(quán)限芽狗。如果定義了功能的某種類型的數(shù)據(jù)權(quán)限,則該用戶只具有該類型下指定數(shù)據(jù)的數(shù)據(jù)權(quán)限痒蓬。
這個(gè)與功能權(quán)限的設(shè)定是剛好相反的童擎,功能權(quán)限是有指定才有權(quán)限,不指定就沒有權(quán)限攻晒。
繼續(xù)上面提到的設(shè)計(jì)方案顾复,假如需求背景進(jìn)一步明確:
張三、李四鲁捏、王五為業(yè)務(wù)一部芯砸,公司一共3個(gè)業(yè)務(wù)部,還有業(yè)務(wù)二部碴萧、業(yè)務(wù)三部,小紅為業(yè)務(wù)一部經(jīng)理末购,小明為銷售部總經(jīng)理破喻。要求按照組織架構(gòu)查看訂單信息:業(yè)務(wù)員只能查看個(gè)人、業(yè)務(wù)經(jīng)理可以查看自己業(yè)務(wù)部的所有訂單盟榴,總經(jīng)理可以查看自己事業(yè)部的所有訂單信息曹质。
首先在數(shù)據(jù)權(quán)限中明確兩個(gè)概念,數(shù)據(jù)類型和數(shù)據(jù)對象擎场。
數(shù)據(jù)類型即數(shù)據(jù)中的某一個(gè)字段羽德,數(shù)據(jù)對象即數(shù)據(jù)類型的值。
比如A部門的人不能看B部門的數(shù)據(jù)迅办,則對于A部門的人來說宅静,其數(shù)據(jù)權(quán)限的數(shù)據(jù)類型就是“部門”,數(shù)據(jù)對象就是A站欺。
基于上述需求設(shè)計(jì)方案相應(yīng)的進(jìn)一步調(diào)整如下:
組織架構(gòu)
首先要有組織架構(gòu)數(shù)據(jù)庫姨夹,用于權(quán)限控制時(shí)調(diào)用纤垂。
角色管理-業(yè)務(wù)員
業(yè)務(wù)員僅可以查看自己的數(shù)據(jù),為了方便磷账,在可專門設(shè)置一個(gè)值為個(gè)人標(biāo)識(shí)峭沦。
角色管理-一部業(yè)務(wù)經(jīng)理
創(chuàng)建角色業(yè)務(wù)一部經(jīng)理,設(shè)置數(shù)據(jù)權(quán)限類型部門為業(yè)務(wù)一部逃糟,標(biāo)識(shí)該角色只可查看業(yè)務(wù)一部的訂單數(shù)據(jù)吼鱼。
角色管理-銷售部總經(jīng)理
創(chuàng)建角色銷售部總經(jīng)理,設(shè)置數(shù)據(jù)權(quán)限類型部門為銷售事業(yè)部绰咽,標(biāo)識(shí)該角色只可查看銷售事業(yè)部的訂單數(shù)據(jù)菇肃。
對于數(shù)據(jù)權(quán)限來說,可根據(jù)需要設(shè)置多個(gè)數(shù)據(jù)類型字段剃诅,比如部門巷送、商戶類型等,基于數(shù)據(jù)的字段來控制權(quán)限矛辕。
以上笑跛,是基于整理的RBAC資料梳理的權(quán)限管理功能設(shè)計(jì)思路,方案上可能有些欠妥聊品,畢竟不是真實(shí)已落地的方案飞蹂,歡迎大家留言指正,如果有真實(shí)案例分享也歡迎推薦呀
附文
補(bǔ)上RBAC的另外幾種延伸形式
1翻屈、RBAC-1
RBAC1引入角色間的繼承關(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)。
2厘贼、RBAC-2
RBAC2模型中添加了責(zé)任分離關(guān)系界酒。RBAC2的約束規(guī)定了權(quán)限被賦予角色時(shí),或角色被賦予用戶時(shí),以及當(dāng)用戶在某一時(shí)刻激活一個(gè)角色時(shí)所應(yīng)遵循的強(qiáng)制性規(guī)則。
責(zé)任分離包括靜態(tài)責(zé)任分離和動(dòng)態(tài)責(zé)任分離嘴秸。
靜態(tài)責(zé)任分離
1毁欣、互斥角色限制:同一個(gè)用戶在兩個(gè)互斥的角色中只能選擇一個(gè)
2、角色數(shù)量限制:一個(gè)用戶擁有的角色數(shù)是有限的岳掐,同樣的權(quán)限也會(huì)是有限的
3凭疮、角色先后限制:用戶要擁有更高級的角色,首先要有相應(yīng)的低級角色
動(dòng)態(tài)責(zé)任分離
4串述、角色激活限制:如一個(gè)用戶允許擁有兩個(gè)角色执解,但運(yùn)行時(shí)只能激活一個(gè)角色
約束與用戶-角色-權(quán)限關(guān)系一起決定了RBAC2模型中用戶的訪問許可。
3纲酗、RBAC-3
RBAC3包含了RBAC1和RBAC2材鹦,既提供了角色間的繼承關(guān)系逝淹,又提供了責(zé)任分離關(guān)系。