FineReport

最強大的動態報表與BI商業智慧工具!

FineReport報表通過許可權控制數據訪問方案

問題:實際應用環境中,不同角色的人可能對數據具有不同的訪問許可權,通過直接在SQL語句中篩選出需要的數據製作模板可以解決該需求,但對於角色較多的情況,就需要製作很多張樣式相同只是數據集不同的報表,不利於後期的維護並且加大了報表製作的工作量。

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

第一步:數據準備
這裡使用的是DEMO數據,主要為了演示該方案的操作,具體使用的時候需要根據具體的數據情況進行調整:

表:datas

ID DATA ROLE
1 100 0
2 200 0
3 300 0
4 400 0
5 500 0
6 600 0
7 700 0
8 800 0

ID:編號
DATA:數據
ROLE:可查看角色編碼

表:roles

ID ROLENANME ROLE
1 總裁 0
2 總經理 1
3 部門經理 2
4 銷售人員 3

ID:編號
ROLENAME:角色名稱
ROLE:角色編碼

第二步:製作報表模板

  1. 新建一張報表模板,報表數據集中新建一個「資料庫查詢數據集」,名稱為:datas,SQL語句寫成「select * from datas where ROLE>=[?ROLE?]」
  2. 拖拽新建的報表數據集datas的數據列至報表中,如下圖所示:
    finereport報表數據集

  3. 新建一個伺服器數據字典,用於進行角色名稱與角色編碼的轉換,因為這裡是演示用,就直接將數據寫死了,使用自定義的伺服器數據字典,用戶可以根據具體的情況使用資料庫查詢數據字典來定義,關鍵點是要將「角色名」設置為key,「角色編碼」設置為value。因為在應用的過程中,一個用戶的角色是通過角色名來定義的,而對數據的訪問控制是通過角色編碼來控制的,這裡需要一個值轉換的過程。如果角色名與角色編碼一致則可以不經過下列步驟的設置。
    數據字典的名稱為:roles_map。
    finereport報表數據字典

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

  5. 保存模板文件即可。
  6. 用戶在集成應用的時候,需要在系統登錄後設置當前登錄的用戶的角色,或者使用FineReport報表工具自帶的許可權管理系統。如果採用FineReport自帶的許可權管理系統,上述SQL語句中的ROLE參數可使用FR_ROLE_NAME來替代,該參數是FineReport許可權系統中的默認登錄角色參數名。具體登錄角色設置方式請參見FineReport許可權集成幫助文檔或諮詢FineReport報表服務人員。

  • 聯繫我們

  • 電話:0933-790886
  • 邮箱:brian.wang@fanruan.com
  • 地址:300 新竹市學府路40號 (交大育成中心 R302)
  • 臉書粉絲團
Copyright©2017 Fanruan Software Co.,Ltd. All Rights Reserved. 帆軟軟體有限公司 | 蘇ICP備14031611號-8

返回頂部