第五章
細(xì)粒度數(shù)據(jù)查詢權(quán)限
(下)
上一章講解通過設(shè)計(jì)器,設(shè)計(jì)出數(shù)據(jù)查詢,并在線測(cè)試。本章講解如何快速定制數(shù)據(jù)查詢,如果將業(yè)務(wù)代碼中的if else邏輯判斷去掉,如何將這種細(xì)粒度的權(quán)限集成到業(yè)務(wù)系統(tǒng)。
快速定制數(shù)據(jù)查詢
上章定制了“查詢所有員工”數(shù)據(jù)查詢。下面我們通過復(fù)制的方式快速定制“查詢本分公司及下屬營(yíng)業(yè)部員工”和“查詢本營(yíng)業(yè)部員工”兩個(gè)數(shù)據(jù)查詢。
打開權(quán)限設(shè)計(jì)器 http://localhost:8080/mydemo/metadmin/designer
按照如下步驟操作,來定制“查詢本分公司及下屬營(yíng)業(yè)部員工”數(shù)據(jù)查詢:
1.
右擊“查詢所有員工”,選擇彈出菜單中“復(fù)制”菜單項(xiàng);
2.
在彈出的對(duì)話框中,名稱欄輸入“查詢本分公司及下屬營(yíng)業(yè)部員工”,描述欄輸入“分公司用戶具有權(quán)限查看”,點(diǎn)擊“確認(rèn)”按鈕;
3.
點(diǎn)擊“查詢本分公司及下屬營(yíng)業(yè)部員工”,選擇“WHERE”標(biāo)簽頁(yè),修改WHERE條件;
4.
右擊“條件組”,選擇“新增條件組”;
5.
修改該條件組的“連接符”為“OR”;
6.
右擊剛才新增的條件組,選擇“新增
二元條件”;
7.
選擇第一個(gè)字段為“company.id”
8.
右擊第二個(gè)字段,將該字段類型替換為“用戶屬性”,并選擇“companyId”用戶屬性;
9.
右擊剛才新增的條件組,選擇“新增
二元條件”;
10.
選擇第一個(gè)字段為“company.parentId”;
11.
右擊第二個(gè)字段,將該字段類型替換為“用戶屬性”,并選擇“companyId”用戶屬性;
12.
點(diǎn)擊“保存”按鈕。
下圖示:(復(fù)制數(shù)據(jù)查詢)

下圖示:(改變字段類型)

按照如下步驟操作,來定制“查詢本營(yíng)業(yè)部員工”數(shù)據(jù)查詢:
1.
右擊“查詢所有員工”,選擇彈出菜單中“復(fù)制”菜單項(xiàng);
2.
在彈出的對(duì)話框中,名稱欄輸入“查詢本營(yíng)業(yè)部員工”,描述欄輸入“營(yíng)業(yè)部用戶具有權(quán)限查看”,點(diǎn)擊“確認(rèn)”按鈕;
3.
點(diǎn)擊“查詢本營(yíng)業(yè)部員工”,選擇“WHERE”標(biāo)簽頁(yè),修改WHERE條件;
4.
右擊“條件組”,選擇“新增
二元條件”;
5.
選擇第一個(gè)字段為“company.id”
6.
右擊第二個(gè)字段,將該字段類型替換為“用戶屬性”,并選擇“companyId”用戶屬性;
7.
點(diǎn)擊“保存”按鈕。
用戶分類
細(xì)粒度權(quán)限控制,核心問題就是針對(duì)不同用戶或者不同類型用戶,采取不同控制。Metadmin采用用戶分類來描述不同用戶類型。用戶分類在整個(gè)業(yè)務(wù)系統(tǒng),在各個(gè)權(quán)限設(shè)置時(shí)候都可以復(fù)用。
示例程序,我們要?jiǎng)?chuàng)建三個(gè)用戶分類:總公司用戶、分公司用戶和營(yíng)業(yè)部用戶。
總公司用戶的規(guī)則是:用戶的機(jī)構(gòu)級(jí)別等于1;
分公司用戶的規(guī)則是:用戶的機(jī)構(gòu)級(jí)別等于2;
營(yíng)業(yè)部用戶的規(guī)則是:用戶的機(jī)構(gòu)級(jí)別等于3。
在權(quán)限設(shè)計(jì)器執(zhí)行如下步驟,完成“總公司用戶”用戶分類定制:
1.
右擊用戶分類樹形結(jié)構(gòu)根節(jié)點(diǎn),選擇“新增
用戶分類”;
2.
在彈出對(duì)話框里面,名稱處輸入“總公司用戶”;
3.
在變量窗口,定義用戶屬性值變量companyLevel,將用戶屬性companyLevel輸入該變量;
4.
在變量窗口,定義固定值變量level,其值等于1;
5.
在表達(dá)式定義窗口,右擊根節(jié)點(diǎn),選擇“添加Binary表達(dá)式”;
6.
第一個(gè)變量選擇companyLevel,操作符選擇“=”,第二個(gè)變量選擇level;
7.
點(diǎn)擊“保存”按鈕,定制完畢。
此時(shí),可以在線測(cè)試該用戶分類是否有效。點(diǎn)擊“測(cè)試”標(biāo)簽頁(yè),選擇用戶進(jìn)行測(cè)試。
下圖示:(定制總公司用戶)

下圖示:(測(cè)試總公司用戶分類,“柴其貴”測(cè)試結(jié)果)

下圖示:(測(cè)試總公司用戶分類,“李朵朵”測(cè)試結(jié)果)

通過,復(fù)制方式快速定制“分公司用戶”和“營(yíng)業(yè)部用戶”兩個(gè)用戶分類。具體過程在此不做敘述。
細(xì)粒度權(quán)限設(shè)置
Metadmin專業(yè)細(xì)粒度權(quán)限管理中間件,強(qiáng)大優(yōu)勢(shì)表現(xiàn)為:
1.
完全將權(quán)限邏輯從業(yè)務(wù)系統(tǒng)中分離出來,且通過界面,引導(dǎo)開發(fā)人員配置出權(quán)限邏輯;
2.
這些權(quán)限邏輯可以在線測(cè)試;
3.
采用分類機(jī)制,免去了業(yè)務(wù)系統(tǒng)里面if else判斷,并且非常直觀地在權(quán)限設(shè)計(jì)器展現(xiàn)出本系統(tǒng)的權(quán)限邏輯;
按照如下步驟完成最后一步定制過程,(整個(gè)過程看起來比較長(zhǎng),熟練后3分鐘即可定義完畢):
1.
在“權(quán)限”分類欄,新建“查詢員工”權(quán)限,輸入相關(guān)信息;
2.
點(diǎn)擊“查詢員工”權(quán)限;
3.
點(diǎn)擊“新增”圖標(biāo),給查詢授權(quán),新增3條授權(quán)策略,如下圖示。
4.
點(diǎn)擊“保存”圖標(biāo)。
下圖示:“查詢員工”細(xì)粒度授權(quán)規(guī)則:

此時(shí),可以點(diǎn)擊“測(cè)試查詢授權(quán)”標(biāo)簽頁(yè),選擇用戶進(jìn)行測(cè)試。
與業(yè)務(wù)系統(tǒng)集成
一般情況下,開發(fā)者會(huì)采用String常量形式引用權(quán)限,而不是int型權(quán)限id。
可以點(diǎn)擊權(quán)限分類欄上面的,“導(dǎo)出”圖標(biāo),導(dǎo)出常量。將常量保存到業(yè)務(wù)系統(tǒng)常量類。
業(yè)務(wù)系統(tǒng),不管是jsp/servlet/manager或者任意其他地方,需要調(diào)用該權(quán)限,獲取當(dāng)前用戶能查詢到的員工。調(diào)用MetadminService.query(
Privilege.QUERY_EMPLOYEE, user, null ),即可獲得user能查詢到的員工數(shù)據(jù)集合(java.util.Collection),每個(gè)元素類型是org.back.demo.Employee,在設(shè)計(jì)SQL時(shí)輸入的映射類。
Metadmin提供了很多查詢接口,還有分頁(yè)、自定義查詢和查詢數(shù)據(jù)條數(shù)等,詳情參加javadoc: http://www.metadmin.com/doc/javadoc/index.html
posted on 2009-06-21 21:47
細(xì)粒度權(quán)限管理 閱讀(2120)
評(píng)論(0) 編輯 收藏