天天看點

基于角色通路控制RBAC(上篇)

最近和幾個同學一起參加了第二屆中國大學生軟體與服務外包大賽(其實是挂在中國大學生計算機設計大賽下),我們選擇的是餐飲手持裝置點餐系統(企業命題),獲得了四川省二等獎,并推薦進入國賽(軟體外包國賽8月5日到8日在杭州舉辦)。

最近我們在完善作品,根據需求分析,我們必須實作員工分組和分組的權限管理,剛開始接觸完全一頭霧水,按照我們的想法,所謂的分組和權限,用不着這麼麻煩吧,直接用If判斷就行啦,多簡單的,但是,老師說,這不行的,如果按照你們想的那樣,那就是做死了,失去了靈活性,他跟我們說至少要建四個表,至于具體哪四個表,我都忘了,哈哈,後來又在網上查了很多資料,知道了有RBAC即Role-Based Access Control,基于角色的通路控制這麼個東東,剛開始查百度百科,維基百科等等,但是他們說的都太複雜了,也不想看,後來我終于找到了,下面給大家分享一下。

下面是摘錄的比較重要的東西,因為那是一篇提問,所有有些回答啊那些就不友善大家檢視。

RBAC(Role-Based Access Control,基于角色的通路控制),就是使用者通過角色與權限進行關聯。簡單地說,一個使用者擁有若幹角色,每一個角色擁有若幹權限。這樣,就構造成“使用者-角色-權限”的授權模型。在這種模型中,使用者與角色之間,角色與權限之間,一般者是多對多的關系。(如下圖)

基于角色通路控制RBAC(上篇)

角色是什麼?可以了解為一定數量的權限的集合,權限的載體。例如:一個論壇系統,“超級管理者”、“版主”都是角色。版主可管理版内的文章、可管理版内的使用者等,這些是權限。要給某個使用者授予這些權限,不需要直接将權限授予使用者,可将“版主”這個角色賦予該使用者。 

當使用者的數量非常大時,要給系統每個使用者逐一授權(授角色),是件非常煩瑣的事情。這時,就需要給使用者分組,每個使用者組内有多個使用者。除了可給使用者授權外,還可以給使用者組授權。這樣一來,使用者擁有的所有權限,就是使用者個人擁有的權限與該使用者所在使用者組擁有的權限之和。(下圖為使用者組、使用者與角色三者的關聯關系)

基于角色通路控制RBAC(上篇)

在應用系統中,權限表現成什麼?對功能子產品的操作,對上傳檔案的删改,菜單的通路,甚至頁面上某個按鈕、某個圖檔的可見性控制,都可屬于權限的範疇。有些權限設計,會把功能操作作為一類,而把檔案、菜單、頁面元素等作為另一類,這樣構成“使用者-角色-權限-資源”的授權模型。而在做資料表模組化時,可把功能操作和資源統一管理,也就是都直接與權限表進行關聯,這樣可能更具便捷性和易擴充性。(見下圖)

基于角色通路控制RBAC(上篇)

請留意權限表中有一列“權限類型”,我們根據它的取值來區分是哪一類權限,如“MENU”表示菜單的通路權限、“OPERATION”表示功能子產品的操作權限、“FILE”表示檔案的修改權限、“ELEMENT”表示頁面元素的可見性控制等。

這樣設計的好處有二。其一,不需要區分哪些是權限操作,哪些是資源,(實際上,有時候也不好區分,如菜單,把它了解為資源呢還是功能子產品權限呢?)。其二,友善擴充,當系統要對新的東西進行權限控制時,我隻需要建立一個新的關聯表“權限XX關聯表”,并确定這類權限的權限類型字元串。

這裡要注意的是,權限表與權限菜單關聯表、權限菜單關聯表與菜單表都是一對一的關系。(檔案、頁面權限點、功能操作等同理)。也就是每添加一個菜單,就得同時往這三個表中各插入一條記錄。這樣,可以不需要權限菜單關聯表,讓權限表與菜單表直接關聯,此時,須在權限表中新增一列用來儲存菜單的ID,權限表通過“權限類型”和這個ID來區分是種類型下的哪條記錄。

到這裡,RBAC權限模型的擴充模型的完整設計圖如下:

基于角色通路控制RBAC(上篇)

随着系統的日益龐大,為了友善管理,可引入角色組對角色進行分類管理,跟使用者組不同,角色組不參與授權。例如:某電網系統的權限管理子產品中,角色就是挂在區局下,而區局在這裡可當作角色組,它不參于權限配置設定。另外,為友善上面各主表自身的管理與查找,可采用樹型結構,如菜單樹、功能樹等,當然這些可不需要參于權限配置設定。

個人認為這個說的還是很不錯的,思路調理都很清晰,相對而言,這個也容易了解一些,特此分享,希望對大家有幫助。也特别感謝那位大大的分享。

原文連結:http://bbs.csdn.net/topics/390643734