潤幹報表資料許可權控制方案

2021-08-25 16:42:13 字數 2827 閱讀 5380

售前現場交流或售後技術支援階段,經常被客戶問到:「你們報表系統是怎麼搞許可權控制的?」

既然經常被問,那麼今天就討論一下這個問題。

首先呢,看看許可權管理長啥樣!

安全策略

,使用者可以訪問而且只能訪問自己被授權的資源,不多不少。

許可權管理幾乎出現在任何系統裡面,一般只要有使用者的系統就可能涉及許可權管理。

從控制力度來看,可以將許可權管理分為兩大類: 1

,功能級許可權管理; 2

,資料級許可權管理。

功能級許可權管理是系統要做的事情,比如哪些人可以看到系統的哪些選單和資源,通常可以由系統開發人員根據業務的流程邏輯控制。而資料級的許可權,特別是報表的資料許可權,則是由報表可以控制或應該控制的事情。

報表的資料許可權控制,可以直觀地理解為:不同的機構、角色或具體到人,訪問同一張報表時所看到的資料是可能不同的。比如,工資條(也是一張簡單的報表),因為絕大多數公司薪資都是保密的,所以很顯然,系統內不同人看到的結果是不能相同的。 再比如,區域銷售情況統計,各區域銷售經理也只能看到所在區域的資料等等。

實際應用環境中,解決此類問題一般是通過直接在sql中篩選出資料繪製報表模板,然後按照登入物件訪問指定的模板就可以了。但是,如果使用使用者的人員眾多,就需要製作n多張樣式相同只是sql(報表資料集)略有不同的報表,工作量大且不利於後期維護。

then,潤幹報表是如何解決資料許可權控制的呢?

實際上,針對這種資料許可權問題,在潤幹報表工具中,可以簡單地通過引數或者巨集的方式來實現,報表接收到系統傳來的人員賬號等資訊引數,動態顯示報表中的資料就行了,從而達到資料許可權控制的目的。

接下來,咱們就趕緊瞅瞅該怎麼做:

第一步:資料準備

這裡採用mysql資料庫,建立資料表 m_datas ,指令碼如下:

create table m_datas (

id int not null,

`data` varchar(100) null,

`role` varchar(100) null

)表資料

id:編號

data:資料

role:可檢視角色編碼

建立角色字典表 m_roles ,指令碼如下:

create table m_roles (

id int not null,

rolename varchar(100) null,

`role` varchar(100) null

)表資料

id:編號

rolename:角色名稱

role:角色編碼

第二步:搞一張報表模板,使用動態引數(巨集),並且拼sql實現資料許可權

新建一張報表模板

(1)報表資料集中新建乙個「sql型別」資料集,名稱為:m_datas,sql語句寫成 「select m_datas.id,m_datas.data,m_datas.role,m_roles.rolename from m_datas,m_roles where  m_datas.role = m_roles.role $」

根據資料集m_datas設計模板並定義表示式:

其中:a、a2單元格錄入表示式:=m_datas.select(id)

b、b2單元格錄入表示式:=m_datas.data

c、c2單元格錄入表示式:=m_datas.role

d、d2單元格錄入表示式:=m_datas.rolename

(2)選單欄:報表à引數,增加「role」引數,引數型別為「普通引數」

(3)選單欄:報表à引數,增加「pri」引數,引數型別為「動態引數」

值表示式為:" and m_datas.role>="+role

注意,通過role的編號我們可以看出,角色越高看到的資料越多。

儲存模板檔案即可。

第三步:發布到伺服器,並訪問報表檢視結果資料

把這個報表發布到報表設計器自帶的demo應用下,通過如下url訪問:

其中,role為報表接收的角色id值,在整合應用時,可從session獲取後傳入。

好了,來啦!!看效果:

role為0時

切換role為3時,僅出現角色id>=3的資料

腫麼樣, 是不是很簡單?

最後,總個結: 潤幹報表不是系統平台,而是一款面向程式猿用於開發報表的工具類軟體產品。之所以不做成統一平台,是為了方便和其他應用系統搞在一起,也就是常說的整合,報表開發後,就可以在系統內作為資源被訪問了。而對於功能或資源許可權,並不是潤幹報表有功能缺失,而是這類控制更容易讓整合應用自己去管,而且也可以免去重複登入驗證或搞單點登入的麻煩。

潤幹報表 鑽取資料

1 設定超連結表示式 reportjsp showeconrespreport.jsp?raq econrespview.raq uuid a3 修改資料 reportjsp showeconrespreport.jsp?raq econrespupdate.raq uuid a3 增加問題 rep...

潤幹報表 鑽取資料

1 設定超連結表示式 reportjsp showeconrespreport.jsp?raq econrespview.raq uuid a3 修改資料 reportjsp showeconrespreport.jsp?raq econrespupdate.raq uuid a3 增加問題 rep...

潤幹報表分組求和 潤幹報表實現組內排序報表及改進

報表開發中經常會遇到需要進行組內排序的報表,如按月份的分組彙總值排序顯示,並顯示每月銷售額前十名的記錄。使用報表工具一般通過隱藏行列輔助可以實現,下面通過例項說明潤幹報表的實現過程,以及改進方案。報表需求 根據銷售管理系統資料統計客戶所在地區的訂單總額,地區並按訂單總額降序排列,要求每個地區中顯示銷...