問題:實(shí)際應(yīng)用環(huán)境中,不同角色的人可能對數(shù)據(jù)具有不同的訪問權(quán)限,通過直接在SQL語句中篩選出需要的數(shù)據(jù)制作模板可以解決該需求,但對于角色較多的情況,就需要制作很多張樣式相同只是數(shù)據(jù)集不同的報表,不利于后期的維護(hù)并且加大了報表制作的工作量。
方案:針對該問題,在FineReport中,可以利用SQL參數(shù)配合參數(shù)處理器再結(jié)合權(quán)限以完成該需求。使用該方案只需要制作一張表樣,利用SQL中的參數(shù)進(jìn)行動態(tài)過濾達(dá)到該目的。下面具體描述該方案的實(shí)施過程。
第一步:數(shù)據(jù)準(zhǔn)備
這里使用的是DEMO數(shù)據(jù),主要為了演示該方案的操作,具體使用的時候需要根據(jù)具體的數(shù)據(jù)情況進(jìn)行調(diào)整:
表:datas
ID DATA ROLE
1 100 0
2 200 0
3 300 0
4 400 1
5 500 1
6 600 2
7 700 2
8 800 3
http://www.finereport.com/forumimages/01.png
ID:編號
DATA:數(shù)據(jù)
ROLE:可查看角色編碼
表:roles
ID ROLENANME ROLE
1 總裁 0
2 總經(jīng)理 1
3 部門經(jīng)理 2
4 銷售人員 3
http://www.finereport.com/forumimages/02.png
ID:編號
ROLENAME:角色名稱
ROLE:角色編碼
第二步:制作模板
2.1 新建一張模板,報表數(shù)據(jù)集中新建一個“數(shù)據(jù)庫查詢數(shù)據(jù)集”,名稱為:datas,SQL語句寫成“select * from datas where ROLE>=[?ROLE?]”
2.2 拖拽新建的報表數(shù)據(jù)集datas的數(shù)據(jù)列至報表中,如下圖所示:
http://www.finereport.com/forumimages/03.png
2.3 新建一個服務(wù)器數(shù)據(jù)字典,用于進(jìn)行角色名稱與角色編碼的轉(zhuǎn)換,因?yàn)檫@里是演示用,就直接將數(shù)據(jù)寫死了,使用自定義的服務(wù)器數(shù)據(jù)字典,用戶可以根據(jù)具體的情況使用數(shù)據(jù)庫查詢數(shù)據(jù)字典來定義,關(guān)鍵點(diǎn)是要將“角色名”設(shè)置為key,“角色編碼”設(shè)置為value。因?yàn)樵趹?yīng)用的過程中,一個用戶的角色是通過角色名來定義的,而對數(shù)據(jù)的訪問控制是通過角色編碼來控制的,這里需要一個值轉(zhuǎn)換的過程。如果角色名與角色編碼一致則可以不經(jīng)過下列步驟的設(shè)置。
數(shù)據(jù)字典的名稱為:roles_map
http://www.finereport.com/forumimages/04.png
2.4 設(shè)置參數(shù)處理器,選擇菜單中的“報表”-“參數(shù)處理器”,定義先前SQL語句中定義的參數(shù)“ROLE”的參數(shù)處理器,這里采用公式類型,用于將角色名處理為角色編碼,公式為:“MAP($ROLE,”roles_map”)”如下圖所示:
http://www.finereport.com/forumimages/05.png
2.5 保存模板文件即可。
2.6 用戶在集成應(yīng)用的時候,需要在系統(tǒng)登錄后設(shè)置當(dāng)前登錄的用戶的角色,或者使用FineReport自帶的權(quán)限管理系統(tǒng)。如果采用FineReport自帶的權(quán)限管理系統(tǒng),上述SQL語句中的ROLE參數(shù)可使用FR_ROLE_NAME來替代,該參數(shù)是FineReport權(quán)限系統(tǒng)中的默認(rèn)登錄角色參數(shù)名。具體登錄角色設(shè)置方式請參見FineReport權(quán)限集成幫助文檔或咨詢FineReport服務(wù)人員
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。