反饋已提交

網絡繁忙

外部權限表實現資料權限過濾

1. 概述

1.1 應用場景

同一張報表,不同的使用者登入,看到的資料不同。

例如:北京分公司的人只能看到北京的資料,上海分公司的人只能看到上海的資料。

1.2 實現思路

引入外部權限表,直接在資料庫查詢語句中實現資料權限的過濾。

2. 簡單權限範例

2.1 瞭解$fine_username

$fine_username:該參數用於獲取決策系統的登入名。詳細內容參見:权限细粒度之参数控制

2.2 建立外部權限表

在資料庫中建立一張外部權限表。表中的 user_code 對應的就是決策系統的帳號,比如:zhangsan 就是帳號。

注:如果之前已經有使用者和城市的對應表,就不需要建立這張對應表了。

2.3 在設計器中引用外部權限表

在 FineReport 設計器中引用2.2中建立的外部權限表,把過濾條件寫在資料原始碼裏。資料過濾分以下兩種情況:

1)如果所有使用者都要過濾權限,就比較簡單,可以直接寫在條件裏。

注:以下程式碼以MySql資料庫為例:


2)如果有的使用者不需要過濾權限,有的使用者需要過濾權限,就需要判斷一下。

注:以下程式碼以MySql資料庫為例:

注:以下程式碼以SQL Server 2014資料庫為例:

3)報表完成後,部署到決策平台,用 zhangsan 這個帳號登入,就只能看到北京市的資料。用 lisi 登入,就只能看到上海市的資料。

3. 多級權限範例

3.1 多級使用者外部權限表

       通常情況下,查看報表的使用者不止一種級別,可能會存在多種級別,如:省公司使用者、分公司使用者、業務員等。這個時候就需要調整一下外部權限表,增加一些欄位來區分不同的使用者。

下圖所示的是經過調整的外部權限表fr_user_city的欄位及內容,可以控制多級使用者權限:

        張三是1級使用者,擁有江蘇省公司的權限;

        李四是2級使用者,擁有3個分公司的權限;

        管雲雲是3級使用者,除了查看自己的業績,還可以查看其他人的業績;

        王銳也是3級使用者,只能查看自己的業績。


3.2在設計器中引用多級使用者外部權限表

注:以下程式碼以MySql資料庫為例:

SELECT t.prov_name AS '一級機構',
      t.city_name AS '二級機構',
      t.sales_name AS '業務員',
      t.int_value AS '數量'
FROM yl_order_table t
WHERE 1 = 1
-- (1)過濾 1級部門
 AND CASE WHEN (SELECT COUNT(1)
                  FROM fr_user_city t
                 WHERE t.valid = 'T'
                   AND t.level IN (1,2,3)   -- 注意:過濾不同級別權限時此處不同
                   AND t.user_code = '${fine_username}'
                )<>0
          THEN t.prov_name IN
               (SELECT distinct t.org1_name -- 注意:過濾不同級別權限時此處不同
                  FROM fr_user_city t
                 WHERE t.valid = 'T'
                   AND t.level IN (1,2,3)   -- 注意:過濾不同級別權限時此處不同
                   AND t.user_code = '${fine_username}'
                )
          ELSE 1=1
     END
 -- (2)過濾 2級部門
 AND CASE WHEN (SELECT COUNT(1)
                  FROM fr_user_city t
                 WHERE t.valid = 'T'
                   AND t.level IN (2,3)      -- 注意:過濾不同級別權限時此處不同
                   AND t.user_code = '${fine_username}'
                )<>0
          THEN t.city_name IN
               (SELECT distinct t.org2_name  -- 注意:過濾不同級別權限時此處不同
                  FROM fr_user_city t
                 WHERE t.valid = 'T'
                   AND t.level IN (2,3)      -- 注意:過濾不同級別權限時此處不同
                   AND t.user_code = '${fine_username}'
                )
          ELSE 1=1
     END
 -- (3)過濾 3級部門
 AND CASE WHEN (SELECT COUNT(1)
                  FROM fr_user_city t
                 WHERE t.valid = 'T'
                   AND t.level = 3           -- 注意:過濾不同級別權限時此處不同
                   AND t.user_code = '${fine_username}'
                )<>0
          THEN t.sales_name IN
               (SELECT distinct t.org3_name  -- 注意:過濾不同級別權限時此處不同
                  FROM fr_user_city t
                 WHERE t.valid = 'T'
                   AND t.level = 3           -- 注意:過濾不同級別權限時此處不同
                   AND t.user_code = '${fine_username}'
                )
          ELSE 1=1
     END
;


4. 注意事項

不同的資料庫會有一定的差異,請根據實際情況進行調整。


附件列表


主題: 數據決策系統
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙