江蘇南大先騰業務框架(五)角色與授權體系 附原始碼

2021-08-29 05:11:18 字數 2370 閱讀 8220

許可權控制模型和方式中介紹了先騰框架許可權控制的方法和控制的粒度。框架只能通過角色為使用者授權,不能將操作許可權直接賦給使用者。這樣做主要是為了簡化許可權模型。這一篇主要講使用者的授權模式。

許可權控制模型和方式中介紹框架中的操作許可權是和**controller類中的方法一一對應的。這個類通常是乙個業務。所以框架中的業務和操作模型是這樣定義的:

乙個業務模組通常對應業務需求,每乙個業務模組有乙個業務id(optid)作為他的主鍵,它在框架中有以下屬性:

業務操作是框架控制許可權的單元,它對應controller類中的乙個方法,它有乙個方法名(optmethod),這方法名和業務id構成這個業務操作的唯一標識。業務操作還有以下屬性:

業務資料範圍定義;業務資料範圍是一組引數驅動sql的外部過濾條件。它的形式為:

[物件或者表.欄位或者屬性]

sql的操作符比如:=

前面的「許可權控制模型和方式」中說了框架是通過使用者是否具備相關操作對應的角色來判斷使用者是否具有相關許可權的。角色在框架中就是一組操作許可權和資料範圍許可權的結合。在操作定義中 操作許可權和資料範圍許可權是對等的,都是作為業務的子屬性(子表),但是在角色定義中,它們不是對等的:

角色對應一組業務操作

可以為每個業務操作選擇這個業務對應的操作範圍許可權,如果不選不是沒有資料範圍許可權而是資料範圍許可權不受控制,即有所有範圍的許可權。

框架有以下角色類別:

f (fixed)系統內建的,固有的,這些角色不能刪除,但是可以修改其對應的的操作許可權。

g (global) 全域性的,這個就是給系統管理員用,分級管理員不能使用這個角色。使用角色是值將角色賦予個人。

p (public) 公用的,這個是系統管理員和分級管理員都可以使用的角色。

d (department)部門(機構)特有的角色,這個式分級管理員建立的,並且只有對應的機構可以使用的角色。

h (hide) 隱藏角色,不要顯示的,是部門可以自己支配的操作許可權集合。分級管理員建立的角色只能在對應的部分所有具有的h型別的角色許可權範圍內選擇。

乙個業務系統根據自己業務需求選擇對應的策略,如果不需要分級管理,就只需要f和g 兩類角色。

內建角色就是f型別的角色,它們有:

anonymous:匿名角色;使用者在沒有登入的狀態下具有的角色。

public:公共角色;所有登入使用者具有的角色,這個角色不需要顯示的賦給任何人。

forbidden:禁用的功能;和public相反,這個角色對應的功能任何人都不能訪問,同樣不需要賦予任何人。

sysadmin : 系統管理員;一般只賦予它系統維護功能,不能賦予它業務功能。

角色授權就是將角色賦予使用者,框架提供了多種授權策略,開發人員可以根據業務的需求選擇不同的策略。總體授權可以分為兩種,顯式授權和隱式授權。乙個使用者具有的許可權為它所有途徑獲得的角色之和。

顯示授權非常簡單,就是系統管理員將全域性或者公共角色授予某個具體的人,或者分級管理人員將部門角色或者公共角色授予某個具體的人。這些授權資料直接持久化到資料庫中就可以了,參見框架原始碼中的userrole物件。

隱式授權就是,不是通過將角色和使用者直接關聯而獲取的許可權,一共有兩種方式獲取。

固定角色中的anonymous 會預設的給所有未登入的使用者,public 會給所有的登入使用者。系統會根據使用者的登入狀態賦他們這兩個角色之一。

部門角色是框架的乙個可選的特性,乙個角色賦給乙個部門,這個部門中的所有成員都將繼承到這個角色。部門角色也有乙個可以配置的選項,就是這個部門角色是否會根據部門的層級自動拓展到下級的部門人員。部門層級的拓展目前是通過使用者角色檢視來做的。對開發人員來說需要知道這個細節。

使用者的崗位和職務一般用於業務流程中的任務分配,這個任務分配也可以認為是一種業務許可權或者流程許可權,參見使用者機構關係計算引擎。本文的角色主要是管理功能許可權的,它們是兩個維度的許可權管理體系,在一般的oa系統中這兩套體系應該式並行的。但是往往功能使用者在業務系統中的功能許可權和他(她)的崗位、職務也有相關性,這樣我們可以在崗位職務資訊中定義乙個預設的功能角色,在給使用者賦予新的崗位或職務時會自動新增這個角色,當然系統管理員還可以手動刪除這個角色。

目前這個設定是放在資料字典中的崗位和職務字典的extra_data2這個欄位中的。

分級授權也是框架的可以可選的特性,開發根據業務的需要可以進行裁剪。

乙個分級管理員的管理範圍只能和他所在的預設機構(組織)關聯。就是乙個分級管理員只能管理他所在的機構以及下級機構的許可權。

分級管理員可以新建這個機構私有的角色(部門角色),並且可以將這些角色賦予使用者。但是分級管理員不能在全域性的功能許可權列表中建立自己的私有角色,他只能在他的部門具有的功能許可權中新建角色。部門的許可權式通過「隱藏角色」來獲得的。 系統(全域性)管理員可也給機構賦予許可權,給機構賦予的許可權對應為** **「g-」+[部門**]**的角色。