系統權限控制的見解

     在許多的實際應用中,不只是要求用戶簡單地進行註冊登錄,還要求不同類別的用戶對資源有不同的操作權限。目前,權限管理系統也是重複開發率最高的模塊之一。

     權限控制應該是分爲3類:

1. 菜單級別
2. 頁面元素級別
3. 數據級別

     目前好像用的比較多的是基於RBAC的,我經常用的也就是控制到菜單級別,對於控制頁面元素和數據級別用的不是很多,目前需要解決權限控制到頁面元素級別,網上看了很多但是不是很明白。不知大家有什麼好的解決方案沒有。大家的表都是怎樣設計的?希望高手們不吝指點,有什麼好的方案讓借鑑借鑑。

     我的目前表主要就包括5張:

     用戶表;角色表;菜單表(包括一級菜單、二級菜單) ;用戶和角色的關聯表(用戶角色多對多);角色和菜單的關聯表等。


     RBAC(基於角色的訪問控制)

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


     可以理解爲一定數量的權限的集合,權限的載體。例如:一個論壇系統,“超級管理員”、“版主”都是角色。版主可管理版內的帖子、可管理版內的用戶等,這些是權限。要給某個用戶授予這些權限,不需要直接將權限授予用戶,可將“版主”這個角色賦予該用戶。

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

     在應用系統中,權限表現成什麼?對功能模塊的操作,對上傳文件的刪改,菜單的訪問,甚至頁面上某個按鈕、某個圖片的可見性控制,都可屬於權限的範疇。有些權限設計,會把功能操作作爲一類,而把文件、菜單、頁面元素等作爲另一類,這樣構成“用戶-角色-權限-資源”的授權模型。而在做數據表建模時,可把功能操作和資源統一管理,也就是都直接與權限表進行關聯,這樣可能更具便捷性和易擴展性。(見下圖)


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

     這樣設計的好處有二。其一,不需要區分哪些是權限操作,哪些是資源,(實際上,有時候也不好區分,如菜單,把它理解爲資源呢還是功能模塊權限呢?)。其二,方便擴展,當系統要對新的東西進行權限控制時,我只需要建立一個新的關聯表“權限XX關聯表”,並確定這類權限的權限類型字符串。

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

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

     隨着系統的日益龐大,爲了方便管理,可引入角色組對角色進行分類管理,跟用戶組不同,角色組不參與授權。例如:某電網系統的權限管理模塊中,角色就是掛在區局下,而區局在這裏可當作角色組,它不參於權限分配。另外,爲方便上面各主表自身的管理與查找,可採用樹型結構,如菜單樹、功能樹等,當然這些可不需要參於權限分配。

     以上,是從基本的RBAC模型進行了擴展,具體的設計要根據項目業務的需要作調整。 



本文參考:http://www.iteye.com/magazines/82

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章