基於組織角色的權限設計

很久沒有寫博客了, 最近研究了一下權限方面的資料,和你們分享一下基於組織角色的權限設計思路。web

 1、 目標:windows

  1. 能夠對功能進行權限控制,控制粒度能夠達到頁面級別和控件級別
  2. 能夠對數據進行權限控制
  3. 能夠按角色、按人、按部門、按崗位等受權,
  4. 能夠分級受權,方便管理   

2、 設計思路 架構

 

1. 模塊spa

模塊是一個抽象的概念,大到能夠表示一個系統,小到能夠表示一個控件的功能,包括了菜單、模塊、頁面、功能、數據權限及數據權限表達式等。設計

1)   菜單:是一個指向某個功能的指針,指向一個頁面或者功能,因此能夠將其視爲一個功能。3d

2)   模塊:頁面功能的分類,模塊下面擁在子模塊和頁面。指針

3)   頁面:呈現給最終用戶的界面,用戶經過頁面來和系統交互,根據系統的不一樣,BS架構時是web頁面, CS架構時是windows界面。blog

4)   控件功能:每一個界面上的控件,例如保存、刪除等按鈕所表明的功能,某個控件的顯示功能等繼承

5)   數據權限: 標識一個須要進行權限控制的數據集合,下面包含多個權限表達式,每個表達式就是一個SQL語句的where條件的一部分。例如查看所有的表達式是 1= 1, 查看本部門的數據的表達式是 DepartmentId = ‘$User.DepartId$’、查看個人數據的表達式是UserId = ‘$User.UserId$’。ci

6)   權限表達式:用來對數據進行過濾,本質上是一個SQL語句的where條件的一部分。每一個表達式都擁有優先級,當同時擁有多個表達式時,取優先級高的表達式。

 

     2. 角色

角色是一組功能的集合,一個角色包含了多個功能權限,方便管理員進行受權,例如系統管理員擁有後臺管理的功能,後臺管理的功能包括相關菜單的權限、相關界面及控件的操做權限。

 

  3. 組織

組織分爲公司、部門、崗位和人員4級,其中公司和部門能夠自循環,公司下面能夠有子公司, 部門下面能夠有子部門。

受權時,將角色分配給組織上的節點,能夠將角色分配給公司、部門、崗位和人員,下級節點自動繼承上級組織的權限, 給某個部門分配角色後, 該部門下面的子部門和相關人員就都具備了該角色所擁有的權限。當某我的歸屬到組織上後,就自動擁有組織的權限。在分配權限時,採用權限遞增的原則進行分配。

 

4. 分級受權

分級受權時,只能分配那些分配給組織的權限,這個和組織所擁有的權限是不一樣的, 例如某個組織節點擁有10項權限, 可是能夠分配的權限可能只是這10箇中的一部分。

 

 5. 相關問題

1)   用戶和組織中的人員是什麼關係?

人員是用戶與組織的關係的表示, 若是一我的只有一個崗位,那麼在組織中就會有一我的員。若是用戶在組織中有多個崗位,即一人多崗的狀況,那麼在組織中就會有多我的員。

 

2)   受權時,爲何不直接把模塊分配給組織,而要先把模塊分配給角色,再把角色分配給組織?

由於模塊中的功能粒度過細,用戶的管理員分不清楚每個模塊具體有什麼功能,但用戶知道角色表明的意義。例如用戶的管理員知道會計角色,可是不知道會計具體使用哪些功能。

這樣角色和組織中的崗位會有必定的重疊,可是二者又有一些區別。組織中的崗位是用戶在實際生活中的角色, 而系統中的角色是爲了方便權限管理而設置的,即權限角色。實際生活中的角色可能擁有多個權限角色。例如總經理可能擁有所有的權限角色,而在組織中總經理是一個崗位。 

 

3、庫表設計

  相關表以CM_開頭( Common的簡寫)

序號

表名

說明

1

CM_User

用戶

2

CM_Org

組織

3

CM_OrgRole

組織角色

4

CM_Role

角色

5

CM_RoleModule

角色功能

6

CM_Module

功能

7

CM_OrgManModule

組織管理的功能(分級受權用)

  庫表關係圖:

 

 

 

4、後續思考

  一、系統應該基於角色的權限控制。

  二、角色有層級關係,其做用主要用於角色管理,而不是權限繼承。

  三、組織表明了角色,當組織存在的時候,可讓程序自動爲每一個組織中的節點創建一個角色,以免組織與角色的重疊。

  四、人員與組織是多對多關係,應該要創建一個組織人員表,而不是將人員也歸到組織表中去。

  五、爲了方便受權,應該有如下幾個功能:按功能受權,按角色受權(包括按人受權)

  六、有組織的按組織受權,沒有組織的按角色受權

相關文章
相關標籤/搜索