一、????????????
考慮實(shí)現(xiàn)
1、? 系統(tǒng)權(quán)限考慮繼續(xù)采用原先實(shí)現(xiàn)方式,在構(gòu)造功能樹和樹狀菜單時(shí)作出權(quán)限判斷;
2、? 數(shù)據(jù)庫(kù)操作權(quán)限考慮應(yīng)用 Acegi 擴(kuò)展,在業(yè)務(wù)層對(duì)相應(yīng)的瀏覽 / 增加 / 修改 / 刪除的業(yè)務(wù)方法進(jìn)行攔截;
3、? 行級(jí)數(shù)據(jù)權(quán)限考慮采用 AOP 的方式在用戶訪問相關(guān)資源時(shí)根據(jù)用戶權(quán)限動(dòng)態(tài)構(gòu)造 SQL 注入到業(yè)務(wù)方法里,再由業(yè)務(wù)方法傳遞到 DAO 里;
4、? 列級(jí)數(shù)據(jù)權(quán)限考慮做入頁(yè)面,這里不再討論。
5、?
大集中模式下的權(quán)限管理,本質(zhì)也是行級(jí)數(shù)據(jù)權(quán)限,即在每次數(shù)據(jù)訪問時(shí)都需要強(qiáng)制判斷用戶所屬部門
Group
。
一、
權(quán)限管理詳細(xì)解決方案
用戶、用戶組、角色設(shè)計(jì)如下:
Principal 即為權(quán)限主體
1、? 系統(tǒng)權(quán)限授權(quán)
web 頁(yè)面:
頁(yè)面上顯示兩棵樹:左側(cè)顯示用戶、用戶組和角色樹,右側(cè)顯示功能模塊樹,功能模塊樹的節(jié)點(diǎn)上跟兩個(gè)復(fù)選框,分別是可見 / 可再授權(quán)。點(diǎn)擊用戶、用戶組和角色樹上的節(jié)點(diǎn)對(duì)相應(yīng)權(quán)限主體進(jìn)行授權(quán)。
很顯然可再授權(quán)權(quán)限包含可見權(quán)限。
數(shù)據(jù)庫(kù)實(shí)現(xiàn):
用 ACL 實(shí)現(xiàn),表設(shè)計(jì)如下:
資源 ID ,權(quán)限主體 ID ,權(quán)限主體 TYPE ,資源 TYPE ,資源操作權(quán)限,條件查詢語(yǔ)句 queryStr 。
說明:
權(quán)限主體 TYPE? 三種: user/group/role
資源 TYPE??? ???? 兩種: function/method? 此時(shí)對(duì)系統(tǒng)權(quán)限來說是 function
條件查詢語(yǔ)句 queryStr??? 數(shù)據(jù)范圍控制 ? 此時(shí)對(duì)系統(tǒng)權(quán)限該字段無(wú)效
對(duì)象:
用戶保存授權(quán)信息時(shí),先刪除該權(quán)限主體 ID 的授權(quán)記錄,再更新。
2、? 數(shù)據(jù)庫(kù)操作權(quán)限授權(quán)
這里引入一個(gè)新的對(duì)象:數(shù)據(jù)庫(kù)操作資源對(duì)象 ? DataResource
表設(shè)計(jì)如下:
ID , NAME , parentId , resStr , resType , desc
說明如下:
ID
NAME 資源名稱 例如:新增用戶
parentId
resStr? 業(yè)務(wù)方法地址 例如: com.way.sevice.UserService.addUser
resType 資源類型,分兩種: abstract/detail? 抽象 / 具體
desc? 描述說明
例子:
對(duì)用戶管理進(jìn)行數(shù)據(jù)庫(kù)操作權(quán)限授權(quán)
新建“用戶管理”做父節(jié)點(diǎn),選擇資源類型為“抽象”
在“用戶管理”下再依次新增“新增用戶”、“瀏覽用戶”、“修改用戶”、“刪除用戶”四個(gè)子節(jié)點(diǎn),選擇資源類型為“具體”
如果系統(tǒng)自己來判斷存儲(chǔ)就是葉子節(jié)點(diǎn)是“具體”,其他為“抽象”
web 頁(yè)面:
頁(yè)面上顯示兩棵樹:左側(cè)顯示用戶、用戶組和角色樹,右側(cè)顯示數(shù)據(jù)庫(kù)操作資源對(duì)象樹,數(shù)據(jù)庫(kù)操作資源對(duì)象樹的葉子節(jié)點(diǎn)的一級(jí)父節(jié)點(diǎn)上跟一個(gè)數(shù)據(jù)范圍限定 button ,點(diǎn)擊后彈出窗口輸入限定條件;葉子節(jié)點(diǎn)上跟一個(gè)復(fù)選框。點(diǎn)擊用戶、用戶組和角色樹上的節(jié)點(diǎn)對(duì)相應(yīng)權(quán)限主體進(jìn)行授權(quán)
授權(quán)信息存入 ACL 表中
資源 TYPE 為 method
3、? 行級(jí)數(shù)據(jù)權(quán)限授權(quán)
已在上面做了說明即數(shù)據(jù)范圍限定
4、? 大集中模式下的權(quán)限授權(quán)
其實(shí)所謂大集中模式控制的也不過是數(shù)據(jù)范圍,考慮是所有相關(guān)表全部增加 groupId 字段,新增時(shí)添入該字段,讀出時(shí)進(jìn)行判斷
web 頁(yè)面:
“組織和用戶管理”模塊中,每個(gè)組織中都允許設(shè)定一個(gè)管理員,一旦設(shè)定管理員,該組織就進(jìn)入大集中模式,即所有該組織的數(shù)據(jù)與其他同級(jí)組織互相隔離,僅上級(jí)組織可見。同時(shí)說明一點(diǎn)的是:該管理員與系統(tǒng)總的管理員權(quán)限一樣,不同的是數(shù)據(jù)范圍僅限制與該組織內(nèi)部。
綜述:
實(shí)際的授權(quán)部分采用了 ACL ,所以授權(quán)比較簡(jiǎn)單和直觀
系統(tǒng)資源和數(shù)據(jù)庫(kù)操作資源分開兩個(gè)表存儲(chǔ),這樣可能會(huì)給用戶帶來不便,也就是授權(quán)時(shí)還需要切換,但這種不便似乎不好解決,因?yàn)橐粋€(gè)是粗粒度的一個(gè)是細(xì)粒度的。
http://www.aygfsteel.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:)