基于RBAC 的SAAS系統(tǒng)權(quán)限設(shè)計
為什么系統(tǒng)需要權(quán)限控制?
生活中有沒有權(quán)限限制?
災(zāi)難片電影《2012》中富人和權(quán)貴有權(quán)登上諾亞方舟,窮苦老百姓只有等著災(zāi)難的來臨;
屌絲身邊為什么沒有那些長得漂亮、身材好的姑娘存在?
因為有錢人和漂亮姑娘都是珍貴稀有的,稀有的人在一起玩耍。而普通人往往無權(quán)擁有他們所擁有的權(quán)限。
權(quán)限管理的本質(zhì)
web程序通過 url 的切換查看不同的頁面(功能),所以權(quán)限管理指的其實就是URL管理,對url控制就是對權(quán)限的控制。
因此,一個人有多少個權(quán)限取決于他可以訪問多少個URL。
RBAC是什么?
RBAC(Role-Based Access Control),是基于角色的訪問控制,是一種先進的權(quán)限管理的模型。RBAC把用戶通過角色與權(quán)限進行關(guān)聯(lián)。即讓一個用戶擁有若干角色,每一個角色擁有若干權(quán)限。
這樣就構(gòu)造成了“用戶-角色-權(quán)限”的授權(quán)模型。在這種模型中,用戶與角色之間,角色與權(quán)限之間,一般者是多對多的關(guān)系。
權(quán)限系統(tǒng)中的概念
用戶
應(yīng)用系統(tǒng)的具體操作者,用戶可以自己擁有權(quán)限信息,可以歸屬于0~n個角色,可屬于0~n個組。他的權(quán)限集是自身具有的權(quán)限、所屬的各角色具有的權(quán)限、所屬的各組具有的權(quán)限的合集。它與權(quán)限、角色、組之間的關(guān)系都是n對n的關(guān)系。
角色
為了對許多擁有相似權(quán)限的用戶進行分類管理,定義了角色的概念,例如系統(tǒng)管理員、管理員、用戶、訪客等角色。角色具有上下級關(guān)系,可以形成樹狀視圖,父級角色的權(quán)限是自身及它的所有子角色的權(quán)限的綜合。父級角色的用戶、父級角色的組同理可推。
組
為了更好地管理用戶,對用戶進行分組歸類,簡稱為用戶分組。組也具有上下級關(guān)系,可以形成樹狀視圖。在實際情況中,我們知道,組也可以具有自己的角色信息、權(quán)限信息。這讓我想到我們的QQ用戶群,一個群可以有多個用戶,一個用戶也可以加入多個群。每個群具有自己的權(quán)限信息。例如查看群共享。QQ群也可以具有自己的角色信息,例如普通群、高級群等。
權(quán)限
系統(tǒng)的所有權(quán)限信息表達了兩層含義。即控制的對象、操作。向上引申可將權(quán)限劃分為3個組成部分:
頁面權(quán)限:用戶可以看到那些頁面;
操作權(quán)限:用戶可以在頁面內(nèi)進行那些操作,增刪改查等;
數(shù)據(jù)權(quán)限:用戶可以看到那些數(shù)據(jù)或內(nèi)容;
權(quán)限模塊設(shè)計
完整的權(quán)限管理做大可作為獨立 系統(tǒng)進行開發(fā),小做也必定做為SAAS平臺的核心基礎(chǔ)模板,在最初迭代初期就進入規(guī)劃、設(shè)計環(huán)節(jié)。在進行權(quán)限模塊設(shè)計時,產(chǎn)品可以從兩個角度考慮:
1.權(quán)限控制管理
即對系統(tǒng)中各類涉及權(quán)限限制的元素進行使用、查看等操作的權(quán)限控制。
l最基本的權(quán)限管理是菜單管理,用戶沒有權(quán)限的功能模塊在菜單節(jié)點上不顯示。
如:普通業(yè)務(wù)人員登錄系統(tǒng)后,是看不到【用戶管理】菜單的。
l功能權(quán)限管理,B/S系統(tǒng)的功能體現(xiàn)為URL,所以功能權(quán)限管理主要是針對URL訪問的管理。
如:經(jīng)過授權(quán),部門經(jīng)理可以查看【用戶管理】菜單,并查看部門用戶信息,但權(quán)限設(shè)計要求,該部門經(jīng)理沒有添加用戶的權(quán)限。所以在訪問【添加用戶】的功能(URL)時,應(yīng)該有沒有授權(quán)的提示信息。同時在【用戶管理】頁面上,【添加用戶】的按鈕應(yīng)該灰色顯示,不能點擊。
l行級權(quán)限管理
如:論壇管理員,權(quán)限設(shè)計要求 A能管理論壇 【新聞版塊】,不能管理論壇 【技術(shù)交流】此時的權(quán)限設(shè)計就應(yīng)該根據(jù)論壇的相應(yīng)ID來判斷權(quán)限信息。
l列級權(quán)限管理
如:業(yè)務(wù)權(quán)限設(shè)計要求,除銷售人員以外,其他用戶不能看到客戶的聯(lián)系方式信息。
此時的權(quán)限設(shè)計要判斷相應(yīng)的字段(列)是否可以顯示。
l組織機構(gòu)/部門級數(shù)據(jù)權(quán)限管理
如:業(yè)務(wù)權(quán)限設(shè)計要求,銷售一部的人員只能看到本部門的銷售訂單,銷售二部的人員只能看到本部門的銷售訂單,但銷售經(jīng)理可以同時看到銷售一部和銷售二部的銷售訂單。此時的權(quán)限設(shè)計就要根據(jù)銷售訂單數(shù)據(jù)本身的部門屬性來做判斷
l范圍型業(yè)務(wù)數(shù)據(jù)權(quán)限管理
如:大賣場銷售人員在下銷售訂單時,要選擇相應(yīng)的產(chǎn)品所在倉庫信息。業(yè)務(wù)權(quán)限設(shè)計要求,【國美】的銷售人員在選擇倉庫的下拉列表中不能看到【廣州倉庫】,而【大中電器】的銷售人員在選擇倉庫的下拉列表中不能看到【北京順義倉庫】
2.權(quán)限分配管理
針對權(quán)限管理內(nèi)容通過系統(tǒng)授權(quán)功能分配給具體的用戶,角色的過程。
l直接對用戶授權(quán),直接分配到用戶的權(quán)限具有最優(yōu)先級別。
l對用戶所屬崗位授權(quán),用戶所屬崗位信息可以看作是一個分組,和角色的作用一樣,但是每個用戶只能關(guān)聯(lián)一個崗位信息。
l對用戶所屬角色授權(quán),用戶所屬角色信息可以看作是一個權(quán)限分組,每個用戶可以關(guān)聯(lián)多個角色。
l角色直接關(guān)聯(lián)具體的功能權(quán)限(URL),也可以關(guān)聯(lián)負(fù)權(quán)限,即此角色關(guān)聯(lián)的權(quán)限不能使用負(fù)權(quán)限功能。負(fù)權(quán)限具有優(yōu)先級別。
l分級授權(quán),系統(tǒng)管理員可以將自己擁有的權(quán)限信息授權(quán)給其他用戶。即可以設(shè)置分級管理員和超級管理員。
界面總體設(shè)計
想想一個簡單的權(quán)限系統(tǒng)應(yīng)該有什么功能呢?當(dāng)然是:用戶-角色-權(quán)限,下圖所示過程:
創(chuàng)建角色列表
在角色列表快速創(chuàng)建一個角色:點擊創(chuàng)建角色,支持創(chuàng)建角色時配置權(quán)限。
創(chuàng)建用戶列表
在用戶列表快速創(chuàng)建一個用戶:支持用戶關(guān)聯(lián)角色的功能。用戶權(quán)限管理常見設(shè)計包括:
l所屬角色:當(dāng)用戶選擇“修改”按鈕時,彈出角色樹形結(jié)構(gòu),操作人可以通過勾選或取消勾選來修改該用戶所屬的角色。
l所屬組:當(dāng)用戶選擇“修改”按鈕時,彈出組的樹形結(jié)構(gòu),操作人可以通過勾選或取消勾選來修改該用戶所屬的組。
l用戶權(quán)限:通過對已具有的權(quán)限取消勾選,或為某權(quán)限添加勾選,來修改用戶的權(quán)限信息,點擊“保存”按鈕保存修改信息。
l總權(quán)限:通過對已具有的權(quán)限取消勾選,或為某權(quán)限添加勾選,來修改用戶的權(quán)限信息,點擊“保存”按鈕保存修改信息。
l用戶管理:當(dāng)選擇了某用戶時,點擊右鍵,彈出菜單列表:修改、刪除、取消,點擊修改和刪除按鈕可以實現(xiàn)用戶的刪除和修改功能。
選擇某個組織,例如 “廣州分公司”,彈出菜單列表:添加子組織、刪除組織、修改組織、添加用戶、取消,點擊添加用戶按鈕可以實現(xiàn)用戶的添加功能。
l組織管理:選擇某個組織,彈出菜單列表:添加子組織、刪除組織、修改組織、添加用戶、取消,點擊添加子組織、刪除組織、修改組織按鈕可以實現(xiàn)組織的添加、刪除和修改功能。
上述案例是基于最簡單的RBAC0模型創(chuàng)建,適用于大部分常規(guī)的權(quán)限管理系統(tǒng)。
角色權(quán)限管理
我們還可以在上面的內(nèi)容基礎(chǔ)上再加上角色等級。角色權(quán)限管理設(shè)計中,通常包括以下內(nèi)容:
l包含用戶:當(dāng)用戶選擇“修改”按鈕時,彈出用戶列表,操作人可以通過勾選或取消勾選來修改該角色所包含的用戶。
l包含組:當(dāng)用戶選擇“修改”按鈕時,彈出用戶列表,操作人可以通過勾選或取消勾選來修改該角色所包含的組。
l角色權(quán)限:通過對已具有的權(quán)限取消勾選,或為某權(quán)限添加勾選,來修改角色的權(quán)限信息,點擊“保存”按鈕保存修改信息。
l管理角色:選中組1的時候,右鍵點擊可彈出組的操作列表,包括添加、刪除和修改按鈕,從而完成在該組下添加子組,刪除該組以及修改該組的功能。
具體界面呈現(xiàn)如下圖:
組權(quán)限管理
除此之外,還有組權(quán)限管理
l包含用戶:當(dāng)用戶選擇“修改”按鈕時,彈出用戶列表,操作人可以通過勾選或取消勾選來修改該組所包含的用戶。
l所屬角色:當(dāng)用戶選擇“修改”按鈕時,彈出角色樹形結(jié)構(gòu),操作人可以通過勾選或取消勾選來修改該組所屬的角色。
l組權(quán)限:通過對已具有的權(quán)限取消勾選,或為某權(quán)限添加勾選,來修改組的權(quán)限信息,點擊“保存”按鈕保存修改信息
l總權(quán)限:通過對已具有的權(quán)限取消勾選,或為某權(quán)限添加勾選,來修改組的權(quán)限信息,點擊“保存”按鈕保存修改信息
l組管理:選中組1的時候,右鍵點擊可彈出組的操作列表,包括添加、刪除和修改按鈕,從而完成在該組下添加子組,刪除該組以及修改該組的功能
操作日志管理
l查詢操作日志:輸入上圖表單中的查詢信息后,點擊“查詢”按鈕,可查詢出符合條件的信息。
l刪除操作日志:輸入上圖表單中的查詢信息后,點擊“查詢”按鈕,可查詢出符合條件的信息。而后點擊“刪除”按鈕,可刪除符合查詢條件的操作日志。