在blog中看到有人寫到web權限管理的一些文章,這裡把我曾經做過的一些權限管理作一下總結,歡迎拍磚。
這裡討論的權限只涉及到信息管理系統裡面的權限管理,超出此范圍的權限管理暫不涉及。
1、權限的應用對象
上面我們已經定義了權限的范圍,就是信息系統管理裡面的表單操作,那麼權限的應用對象就是表單,更進一步說,就是表達表單內容的web管理頁面。
2、權限的分類
一個頁面的權限范圍分為以下幾種,也可以叫做基本權限單位。
l 操作權限:操作權限是一種頁面級別的權限,也可以叫做頁面權限。包括以下幾種
n 新增
n 修改
n 刪除
n 查詢
在此基礎上還可以進行更加詳細的一些分類,比如查看他人記錄的權限,修改他人記錄的權限等。這部分也可以使用下面的記錄權限來實現。
l 按鈕權限:針對頁面上按鈕的權限管理,包括
n 是否可見
n 是否可用
有時候,我們可以把按鈕權限看作為字段權限。
l 字段權限:字段在頁面的不同狀態(新增,修改,查詢)下面的各種狀態管理。包括
n 是否可見
n 是否可修改
l 記錄權限:記錄權限是指用戶對某些記錄的查看和修改權限。比如客戶關系管理系統中,不同界別的系統用戶可以看到不同的記錄,例如上司可以看他所有下級員工的客戶列表等。
3、權限的實現模型
上面的權限分類大概對涉及到頁面元素的權限進行了一個比較全面的概括。另外一個問題就是權限管理的實現模型。在大部分的系統中都是用的基於角色控制模型的權限管理。在這樣的系統中,創建一系列的角色,然後把基本權限單位分配給這些角色,再把角色分配給用戶,這樣用戶登錄系統後,就根據當前用戶所擁有的角色可以定位出權限。
在針對信息管理系統中,權限模型有自己的特色,除了角色的概念以外,還有表單權限的概面。第一節裡面所討論的各種權限基本單位不但可以應用到角色上,也可以應用到表單上。
對於應用到表單上的基本權限單位,我們叫做表單的固有權限屬性(靜態權限)。對於應用到角色上的基本權限單位,我們叫做角色權限屬性(動態權限)。用下圖來表示:
根據上面的模型,一個用戶登錄到系統中後,得到某一個表單的權限就和這個表單的固有權限屬性和這樣用戶所擁有的角色有關。
4、權限的計算方式
用戶登錄後對一個表單進行操作,靜態權限只有一個,即表單本身的權限屬性,動態權限可以有多個,即用戶可以同時屬於多個角色,這些角色在這個表單上都有不同的動態權限。用戶對這個表單所能進行的操作是由這個動態權限和靜態權限的綜合作用決定的。進行權限判斷分為兩個步驟:
1、 動態權限組合:根據用戶所屬的角色的權限分析得到最終的動態權限集合。
2、 動態權限和靜態權限的組合:利用得到的動態權限集合再和靜態權限進行綜合分析得到用戶的最終權限。
在動態權限和動態權限進行組合判斷,以及動態權限和靜態權限進行組合判斷的時候,根據權限類型的不同,使用不同的組合判斷方法
對於 操作權限,分為兩種組合方法:
l 或操作:或操作認為,兩個層次的權限單位進行比較,只要其中一個權限單位認為“可以做”,那麼組合權限結果就是“可以做”。例如對於“增加”這個操作權限,如果角色A設置為可以增加,角色B設置為不可以增加,那麼綜合的結果就是 可以進行 “增加”
l 與操作:與操作認為,兩個層次的權限單位進行比較,只要其中一個權限單位認為“不可以做”,那麼組合權限結果就是“不可以做”。例如: 對於“增加”這個操作權限,如果角色A設置為可以增加,角色B設置為不可以增加,那麼綜合的結果就是 不可以進行 “增加”
對於字段權限 和 記錄權限 只有一種組合方法:
l 權限並集:也就是說組合的結果是這兩種層級的權限單位控制范圍的一個相交的結果。例如:對於角色A,他在表單F上的的只讀字段為(a,b,c,d),角色B在表單F上的只讀字段為(c,d,e,f),那麼角色A和角色表的相交結果就是只讀字段集合(a,b,c,d,e,f)。
下面兩張表顯示了不同的權限層次,不同的權限類型在進行權限比較時選擇不同的比較方法:
不同的角色之間進行權限比較:
角色B-操作權限
角色B-字段權限
角色B-記錄權限
角色A-操作權限
或操作
角色A-字段權限
並集
角色A-記錄權限
並集
當有多個角色權限是,列入有角色A,B,C,D,先對A,B做計算,然後把計算結果和C進行計算,依次類推。
動態權限和靜態權限進行權限比較:
動態權限-操作權限
動態權限-字段權限
動態權限-記錄權限
靜態權限-操作權限
與操作
靜態權限-字段權限
並集
靜態權限-記錄權限
並集