天天看點

通用權限管理設計

一.引言

      因為做過的一些系統的權限管理的功能雖然在逐漸完善,但總有些不盡人意的地方,總想抽個時間來更好的思考一下權限系統的設計。

      權限系統一直以來是我們應用系統不可缺少的一個部分,若每個應用系統都重新對系統的權限進行設計,以滿足不同系統使用者的需求,将會浪費我們不少寶貴時間,是以花時間來設計一個相對通用的權限系統是很有意義的。

二.設計目标

      設計一個靈活、通用、友善的權限管理系統。

      在這個系統中,我們需要對系統的所有資源進行權限控制,那麼系統中的資源包括哪些呢?我們可以把這些資源簡單概括為靜态資源(功能操作、資料列)和動态資源(資料),也分别稱為對象資源和資料資源,後者是我們在系統設計與實作中的叫法。

系統的目标就是對應用系統的所有對象資源和資料資源進行權限控制,比如應用系統的功能菜單、各個界面的按鈕、資料顯示的列以及各種行級資料進行權限的操控。

三.相關對象及其關系

      大概理清了一下權限系統的相關概念,如下所示:

1.       權限

系統的所有權限資訊。權限具有上下級關系,是一個樹狀的結構。下面來看一個例子

系統管理

       使用者管理

              檢視使用者

               新增使用者

                    修改使用者

                    删除使用者

      對于上面的每個權限,又存在兩種情況,一個是隻是可通路,另一種是可授權,例如對于“檢視使用者”這個權限,如果使用者隻被授予“可通路”,那麼他就不能将他所具有的這個權限配置設定給其他人。

2.       使用者

應用系統的具體操作者,使用者可以自己擁有權限資訊,可以歸屬于0~n個角色,可屬于0~n個組。他的權限集是自身具有的權限、所屬的各角色具有的權限、所屬的各組具有的權限的合集。它與權限、角色、組之間的關系都是n對n的關系。

3.       角色

為了對許多擁有相似權限的使用者進行分類管理,定義了角色的概念,例如系統管理者、管理者、使用者、訪客等角色。角色具有上下級關系,可以形成樹狀視圖,父級角色的權限是自身及它的所有子角色的權限的綜合。父級角色的使用者、父級角色的組同理可推。

4.       組

為了更好地管理使用者,對使用者進行分組歸類,簡稱為使用者分組。組也具有上下級關系,可以形成樹狀視圖。在實際情況中,我們知道,組也可以具有自己的角色資訊、權限資訊。這讓我想到我們的QQ使用者群,一個群可以有多個使用者,一個使用者也可以加入多個群。每個群具有自己的權限資訊。例如檢視群共享。QQ群也可以具有自己的角色資訊,例如普通群、進階群等。

針對上面提出的四種類型的對象,讓我們通過圖來看看他們之間的關系。

通用權限管理設計

     有上圖中可以看出,這四者的關系很複雜,而實際的情況比這個圖還要複雜,權限、角色、組都具有上下級關系,權限管理是應用系統中比較棘手的問題,要設計一個通用的權限管理系統,工作量也着實不小。

當然對于有些項目,權限問題并不是那麼複雜。有的隻需要牽涉到權限和使用者兩種類型的對象,隻需要給使用者配置設定權限即可。

在另一些情況中,引入了角色對象,例如基于角色的權限系統, 隻需要給角色配置設定權限,使用者都隸屬于角色,不需要單獨為使用者配置設定角色資訊。

繼續閱讀