報表系統FineReport經過權限控制數據訪問方案

問題:實際應用環境中,不一樣角色的人可能對數據具備不一樣的訪問權限,經過直接在SQL語句中篩選出須要的數據製做模板能夠解決該需求,但對於角色較多的狀況,就須要製做不少張樣式相同只是數據集不一樣的報表,不利於後期的維護而且加大了報表製做的工做量。html

方案:針對該問題,在報表系統FineReport中,能夠利用SQL參數配合參數處理器再結合權限以完成該需求。使用該方案只須要製做一張表樣,利用SQL中的參數進行動態過濾達到該目的。下面具體描述該方案的實施過程。數據庫

 

第一步:數據準備服務器

    這裏使用的是DEMO數據,主要爲了演示該方案的操做,具體使用的時候須要根據具體的數據狀況進行調整:編碼

表:datasspa

IDorm

DATAhtm

ROLEblog

1ci

100文檔

2

200

3

300

4

400

1

5

500

1

6

600

2

7

700

2

8

800

3

 

ID:編號

DATA:數據

ROLE:可查看角色編碼

 

表:roles

ID

ROLENANME

ROLE

1

總裁

2

總經理

1

3

部門經理

2

4

銷售人員

3

ID:編號

ROLENAME:角色名稱

ROLE:角色編碼

 

第二步:製做模板

2.1 新建一張模板,報表數據集中新建一個「數據庫查詢數據集」,名稱爲:datas,SQL語句寫成「select * from datas where ROLE>=[?ROLE?]

2.2 拖拽新建的報表數據集datas的數據列至報表中,以下圖所示:

http://www.finereport.com/forumimages/tgqxkzsjfw1.jpg

2.3 新建一個服務器數據字典,用於進行角色名稱與角色編碼的轉換,由於這裏是演示用,就直接將數據寫死了,使用自定義的服務器數據字典,用戶能夠根據具體的狀況使用數據庫查詢數據字典來定義,關鍵點是要將「角色名」設置爲key,「角色編碼」設置爲value。由於在應用的過程當中,一個用戶的角色是經過角色名來定義的,而對數據的訪問控制是經過角色編碼來控制的,這裏須要一個值轉換的過程。若是角色名與角色編碼一致則能夠不通過下列步驟的設置。

數據字典的名稱爲:roles_map

http://www.finereport.com/forumimages/tgqxkzsjfw2.jpg

2.4 設置參數處理器,選擇菜單中的「報表」-「參數處理器」,定義先前SQL語句中定義的參數「ROLE」的參數處理器,這裏採用公式類型,用於將角色名處理爲角色編碼,公式爲:「MAP($ROLE,」roles_map」)」以下圖所示:

http://www.finereport.com/forumimages/tgqxkzsjfw3.jpg

2.5 保存模板文件便可。

2.6 用戶在集成應用的時候,須要在系統登陸後設置當前登陸的用戶的角色,或者使用FineReport自帶的權限管理系統。若是採用FineReport自帶的權限管理系統,上述SQL語句中的ROLE參數可以使用FR_ROLE_NAME來替代,該參數是FineReport權限系統中的默認登陸角色參數名。具體登陸角色設置方式請參見FineReport權限集成幫助文檔或諮詢FineReport服務人員。

文章轉自:http://blog.vsharing.com/fanfanzheng/A1448107.html

相關文章
相關標籤/搜索