1.引言
1.1編寫目的
略
1.2項目背景
略
1.3術語與約定
安全對象
訪問受控制的對象,如:“報表”、“項目”等。系統中主要的“業務對象”都是典型的安全對象。
訪問場景
一個訪問場景將提供諸如“操作者”、“被操作對象”、“操作方法”、“業務狀態”、“有效期限”等元素,供訪問驗證判斷所用。根據分析(詳見參考文檔中的說明),每個訪問場景至少包括三個必須的元素:
“操作者”,用戶、角色、用戶組、單位等;
“被操作對象”,具體的業務對象,如“報表”;
“操作方法”,對應被操作對象的基本操作和業務操作,依賴於“被操作對象”。
訪問場景中的其他元素,如“業務狀態”、“對象所屬”、“有效期限”等在本次設計中不是必須滿足項,但兼顧設計。
系統功能
一個業務系統的功能項也受訪問控制。在一個訪問場景中,將整個業務系統視爲“被操作對象”,各系統功能就成爲了訪問場景中的“操作方法”,便於模型的統一。
訪問控制
或訪問驗證,系統中發生訪問場景時,進行允許或禁止,不同於權限管理。詳見2.任務概述。
權限管理
或訪問控制管理,對訪問規則進行維護管理,不同於訪問控制。詳見2.任務概述。
1.4參考資料
內部
《四維權限管理模型》
外部
略
2.任務概述
與權限相關聯的有“訪問驗證”和“訪問控制管理”兩項主要任務:
訪問驗證
根據事先定義的訪問許可規則對系統中的各種訪問操作(含對系統功能的訪問、對業務對象的訪問)的合法性進行驗證。是訪問許可規則作用的動態實現。
訪問控制管理
主要是管理維護系統允許中各種訪問操作時各種因素(訪問者、訪問系統功能、訪問業務對象、訪問業務規則等)之間的關係。是對訪問許可規則靜態管理維護的實現。
涉及用例
“訪問驗證”和“訪問控制管理”在系統中是兩個用例。其中“訪問控制管理”以權限管理模塊來實現(與系統具體業務關聯緊密,本次迭代不涉及),“訪問驗證”以訪問控制模塊來實現。除開數據的依賴,在業務上兩者相互獨立。
3.用例分析
用例名稱:訪問控制
描述:根據業務需求和安全需求,當在其他用例中發生對安全對象進行訪問時,訪問控制對這一行爲進行允許或禁止控制。
前置條件:其他用例對安全對象的訪問被激活。
後置條件:無
基本事件流:
1)其他用例請求對某一安全對象進行訪問,事件流開始;
2)根據當前訪問場景的各元素(操作者、被操作對象、操作方法、有效期限等)進行訪問驗證,得到驗證結果;
3)根據驗證結果對當前訪問進行允許或禁止,事件流結束。
可選事件流:略。
部署約束:
在有訪問控制要求的其他用例所在的物理層或邏輯層中均可以訪問本用例。
活動圖:略。
非功能需求:對單個安全對象訪時,訪問驗證時間消耗與訪問操作本身的時間消耗在同一數量級以內。
未解決問題:無
說明:
4.對象設計
4.1用例中的對象
邊界對象<>:無
控制對象<>:即訪問控制者對象AccessController,由該對象對訪問進行控制。
實體對象<>:即某一安全對象。
操作流程對象<>:用於引發訪問場景的流程的抽象,如某個業務操作。
說明:訪問控制者對象AccessController是唯一在本用例中可以完成設計的對象,其他對象均屬於其他用例,但訪問控制的實現需要這些對象在設計模式上進行配合。
4.2用例中的行爲
訪問驗證:由訪問控制者對象所有,由操作流程對象(即某一業務操作)激發。訪問驗證需存在於一個具體的訪問場景中,是對原子化的操作訪問的允許或禁止判斷。
權限邏輯運算:當操作流程對象引發對多對象的訪問時,並因此在該訪問場景中,根據訪問驗證出現權限干涉、權限二意性時,權限邏輯運算根據安全邏輯或業務邏輯對權限進行合併或篩選。權限邏輯運算由操作流程對象激發。
對象訪問:由其他用例直接發起,或委託操作流程對象發起。對象訪問需通過訪問驗證和權限邏輯運算。
4.3對象時序圖
4.4類定義
對安全對象的訪問控制在用例中適應對象訪問控制者對象來完成,該對象以ObjectAccessController類實現:(採用接口化設計的分析過程詳見參考文檔)
5.類實現設計
5.1類實現
安全對象訪問控制者類ObjectAccessController
說明 |
|
|
主要成員 |
ValidateRules:java.util.ArrayList |
驗證規則數組,用以容納不同的驗證規則類ValidateRule,本項目僅包含ACM驗證規則對象――ACMAccessValidate。
|
主要方法 |
public static bool IsValidate(ISecurityObject, IOperator, IOperateMethod) |
用於驗證訪問操作合法性的驗證函數,該函數調用類的驗證規則數組中所有的驗證規則類逐一驗證,最後彙總作出判斷 |
驗證規則抽象類ValidateRule
說明 |
用於使所有的驗證規則對象具有相同的調用格式 |
|
主要成員 |
|
|
主要方法 |
public bool Validate( ISecurityObject IOperator, IOperateMethod) |
用於驗證訪問操作合法性的驗證函數
|
ACM驗證規則類ACMValidateRule
說明 |
用於實現按照ACM進行訪問驗證 |
|
主要成員 |
|
|
主要方法 |
public override bool Validate( ISecurityObject IOperator, IOperateMethod) |
用於驗證訪問操作合法性的驗證函數
|
備註:用於支持訪問控制用例,訪問場景中的元素在均被定義爲標準接口的實現。
安全對象:ISecurityObject
操作者:IOperator
操作方法:IOperateMethod
其他用例在實現類設計時,需從這裏繼承。
5.2數據實現
本次迭代中,僅ACM驗證規則類ACMValidateRule需要實現。ACM作用原理詳見參考文檔中的分析。
“訪問控制矩陣(規則)表”
字段說明 |
字段名 |
數據類型 |
是否允許爲空 |
數據完整性 |
流水號
|
id
|
Int
|
Not null
|
PK
|
有效碼
|
IntValid
|
Int
|
Not null
|
Default“0”
|
安全對象類型
|
chrSOType
|
Char(20)
|
Not null
|
|
安全對象ID
|
IntSOId
|
Int
|
Not null
|
FK
|
操作者類型
|
ChrOprType
|
Char(20)
|
Not null
|
|
操作者ID
|
IntOprId
|
Int
|
Not null
|
FK
|
操作方法名稱
|
ChrMethod
|
Char(20)
|
Not null
|
|
有效期開始時間
|
DtmActive
|
Datetime
|
Null
|
|
有效期結束時間
|
DtmExpired
|
Datetime
|
Null
|
|
業務流程狀態碼
|
IntProcessState
|
Int
|
Null
|
|
安全對象狀態碼
|
IntSOState
|
Int
|
Null
|
|
|
||||
說明: 根據該表記錄,讀取相應“有效碼”,無記錄(即無有效碼),爲訪問禁止,否則爲訪問許可。
“有效碼”用於擴展
“有效期開始時間”、“有效期結束時間”用於以後的有效期權限驗證,可取消
“業務流程狀態碼”、“安全對象狀態碼”用於以後的業務條件權限驗證,可取消
|
6.負載平衡設計
業務系統中如有L個安全對象,每個安全對象有M個受訪問控制操作方法,並有N個不同的訪問者,按照非樂觀估計:“訪問控制矩陣(規則)表”會有L×M×N條記錄。
建議在安全對象較多時,爲每個安全對象建立1對1的訪問控制表,提高效率,平衡負載。
...
- end -
Beegee: 和我在一個產品開發中共事了半年的部門經理(其實是產品經理)告訴我可以離開項目組了。半年前,他委託我設計他的產品中的權限管理模塊。於是,我用我貧瘠的大腦給他想了些方案。難得他還那麼看得上,支持我實現了我的設計,當然也加了不少我不喜歡的東西。現在,卻因爲一些原因我要離開這個產品組了,這位經理也不準備對這個模塊再作更多的投入了,於是我想我可以把我的這些的想法拿到我的Blog中了,算是自我消遣吧。^_^,也希望能夠幫助其他程序員完善他們自己的設計,全當反面教材啦!
共兩篇:
1.“ACM四維權限管理模型”
2.“權限管理與訪問控制概要設計”(本文)
其它相關原創:
“
淺談權限管理的對象模型和實現”
“
淺談權限管理的對象模型和實現”