报表系统FineReport通过权限控制数据访问方案
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
問(wèn)題:實(shí)際應(yīng)用環(huán)境中,不同角色的人可能對(duì)數(shù)據(jù)具有不同的訪問(wèn)權(quán)限,通過(guò)直接在SQL語(yǔ)句中篩選出需要的數(shù)據(jù)制作模板可以解決該需求,但對(duì)于角色較多的情況,就需要制作很多張樣式相同只是數(shù)據(jù)集不同的報(bào)表,不利于后期的維護(hù)并且加大了報(bào)表制作的工作量。
方案:針對(duì)該問(wèn)題,在報(bào)表系統(tǒng)FineReport中,可以利用SQL參數(shù)配合參數(shù)處理器再結(jié)合權(quán)限以完成該需求。使用該方案只需要制作一張表樣,利用SQL中的參數(shù)進(jìn)行動(dòng)態(tài)過(guò)濾達(dá)到該目的。下面具體描述該方案的實(shí)施過(guò)程。
?
第一步:數(shù)據(jù)準(zhǔn)備
????這里使用的是DEMO數(shù)據(jù),主要為了演示該方案的操作,具體使用的時(shí)候需要根據(jù)具體的數(shù)據(jù)情況進(jìn)行調(diào)整:
表:datas
ID | DATA | ROLE |
1 | 100 | |
2 | 200 | |
3 | 300 | |
4 | 400 | 1 |
5 | 500 | 1 |
6 | 600 | 2 |
7 | 700 | 2 |
8 | 800 | 3 |
?
ID:編號(hào)
DATA:數(shù)據(jù)
ROLE:可查看角色編碼
?
表:roles
ID | ROLENANME | ROLE |
1 | 總裁 | |
2 | 總經(jīng)理 | 1 |
3 | 部門(mén)經(jīng)理 | 2 |
4 | 銷(xiāo)售人員 | 3 |
ID:編號(hào)
ROLENAME:角色名稱(chēng)
ROLE:角色編碼
?
第二步:制作模板
2.1 新建一張模板,報(bào)表數(shù)據(jù)集中新建一個(gè)“數(shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù)集”,名稱(chēng)為:datas,SQL語(yǔ)句寫(xiě)成“select * from datas where ROLE>=[?ROLE?]”
2.2 拖拽新建的報(bào)表數(shù)據(jù)集datas的數(shù)據(jù)列至報(bào)表中,如下圖所示:
http://www.finereport.com/forumimages/tgqxkzsjfw1.jpg
2.3 新建一個(gè)服務(wù)器數(shù)據(jù)字典,用于進(jìn)行角色名稱(chēng)與角色編碼的轉(zhuǎn)換,因?yàn)檫@里是演示用,就直接將數(shù)據(jù)寫(xiě)死了,使用自定義的服務(wù)器數(shù)據(jù)字典,用戶(hù)可以根據(jù)具體的情況使用數(shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù)字典來(lái)定義,關(guān)鍵點(diǎn)是要將“角色名”設(shè)置為key,“角色編碼”設(shè)置為value。因?yàn)樵趹?yīng)用的過(guò)程中,一個(gè)用戶(hù)的角色是通過(guò)角色名來(lái)定義的,而對(duì)數(shù)據(jù)的訪問(wèn)控制是通過(guò)角色編碼來(lái)控制的,這里需要一個(gè)值轉(zhuǎn)換的過(guò)程。如果角色名與角色編碼一致則可以不經(jīng)過(guò)下列步驟的設(shè)置。
數(shù)據(jù)字典的名稱(chēng)為:roles_map
http://www.finereport.com/forumimages/tgqxkzsjfw2.jpg
2.4 設(shè)置參數(shù)處理器,選擇菜單中的“報(bào)表”-“參數(shù)處理器”,定義先前SQL語(yǔ)句中定義的參數(shù)“ROLE”的參數(shù)處理器,這里采用公式類(lèi)型,用于將角色名處理為角色編碼,公式為:“MAP($ROLE,”roles_map”)”如下圖所示:
http://www.finereport.com/forumimages/tgqxkzsjfw3.jpg
2.5 保存模板文件即可。
2.6 用戶(hù)在集成應(yīng)用的時(shí)候,需要在系統(tǒng)登錄后設(shè)置當(dāng)前登錄的用戶(hù)的角色,或者使用FineReport自帶的權(quán)限管理系統(tǒng)。如果采用FineReport自帶的權(quán)限管理系統(tǒng),上述SQL語(yǔ)句中的ROLE參數(shù)可使用FR_ROLE_NAME來(lái)替代,該參數(shù)是FineReport權(quán)限系統(tǒng)中的默認(rèn)登錄角色參數(shù)名。具體登錄角色設(shè)置方式請(qǐng)參見(jiàn)FineReport權(quán)限集成幫助文檔或咨詢(xún)FineReport服務(wù)人員。
文章轉(zhuǎn)自:http://blog.vsharing.com/fanfanzheng/A1448107.html
轉(zhuǎn)載于:https://my.oschina.net/u/194678/blog/35708
總結(jié)
以上是生活随笔為你收集整理的报表系统FineReport通过权限控制数据访问方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 耦合天线测试软件,以CPL天线为W-Fi
- 下一篇: java信息管理系统总结_java实现科