报表系统FineReport通过权限控制数据访问方案

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

问题:实际应用环境中,不同角色的人可能对数据具有不同的访问权限,通过直接在SQL语句中筛选出需要的数据制作模板可以解决该需求,但对于角色较多的情况,就需要制作很多张样式相同只是数据集不同的报表,不利于后期的维护并且加大了报表制作的工作量。

方案:针对该问题,在报表系统FineReport中,可以利用SQL参数配合参数处理器再结合权限以完成该需求。使用该方案只需要制作一张表样,利用SQL中的参数进行动态过滤达到该目的。下面具体描述该方案的实施过程。

 

第一步:数据准备

    这里使用的是DEMO数据,主要为了演示该方案的操作,具体使用的时候需要根据具体的数据情况进行调整:

表: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:编号

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

转载于:https://my.oschina.net/u/194678/blog/35708

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SkyWalking配上告警更优秀

前言对于监控系统来说,不可能让人一直盯着监控看板,而更多的是以自动提醒的方式,比如邮件、短信或微信推送等,当达到或超出预设的告警指标时,就自动发送消息提醒,下面就来说说如何配置SkyWalking的告警。正…

python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法

本文实例讲述了Python实现Sqlite将字段当做索引进行查询的方法。分享给大家供大家参考,具体如下:默认从sqlite中获取到的数据是数字索引的, 在开发阶段经常有修改数据库所以显得不太方便, 其实在python源码里就有解决方案, 直接读sqlite3的源码, 摸索了一…

神抓拍!2020搞笑野生动物摄影大赛,哈哈哈哈哈笑到头掉

全世界只有3.14 % 的人关注了爆炸吧知识图片来自CWPAs 2020小动物们到底能有多好玩让我们来看看今年的搞笑野生动物摄影大赛吧保准叫你从头笑到尾(以下是入围作品)“飚自行车的”猴看起来像个酷猴▲摄影:Yevhen Samuchenko真情实感演绎“我太…

【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate

ESFramewor使用技巧(2)-- 在插件中使用NHibernate 我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用…

如何在ashx页面获取Session值(未将对象引用设置到对象的实例) (转)

如何在ashx页面获取Session值(未将对象引用设置到对象的实例) 分类: .Net学习笔记 Session 2011-11-30 10:25 902人阅读 评论(1) 收藏 举报在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下&am…

java字符串从后截取_java 字符串截取的几种方式(转)

众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。 1.split()+正则表达式来进行截取。 将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。 String str = "abc,12,3yy98,0"; Strin…

REST 深度进阶

最近团队人数在扩大,才发现,REST 这个出来很多年头的东西,居然还有人用不好。说起来,REST 出现已经很久了。从早期的三层架构,到现在的多层、微服务,核心内容之一就是 API --- 从非常简单的 API&#xff0c…

绝不翻车珍珠奶茶做法

1 如何在家自制珍珠奶茶▼2 儿子,妈妈给你烤小饼干哦▼3 放假太久了连自己哪个班都忘了▼4 想问下,鸟是在哪都能起窝吗?▼5 不到万不得已,绝不去做▼6 这个店名太童年阴影了▼7 小鸡做错了什么?▼你点的每个赞&…

margin三个值

http://www.cnblogs.com/wangkongming/p/3204734.html margin标记可以带一个、二个、三个、四个参数,各有不同的含义。 margin: 20px;(上、下、左、右各20px。)margin: 20px 40px;(上、下20px;左、右40px。&#xff09…

循环控制for

<?php/***燕十八 公益PHP培训课堂地址:YY频道88354001 学习社区:www.zixue.it **/ /***for(初始条件1;判断条件2;4:钱减少) {执行语句3; }***/for($i10; $i >1; $i--) {echo $i,<br />; }/** 扩展一下for循环,同时循环两个数 打印 5 1 4 2 3 3 2 4 1 5 **/f…

常用JS代码大全

事件源对象 event.srcElement.tagName event.srcElement.type捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey事件返回值 event.returnValue鼠标位置 event.x event.y窗体活…

施一公:“中国式科研”误国误民!表面上一片繁荣,实则深藏危机

全世界只有3.14 % 的人关注了爆炸吧知识论文和科技实力是两回事在全国政协十三届一次会议上&#xff0c;中国科学院院士、清华大学原副校长施一公曾说道&#xff1a;“我以前曾经预测&#xff0c;中国会在2020年论文数超过美国&#xff0c;没想到我们提前完成了。”但面对这项数…

正确使用和理解C#中的闭包

定义 我们把在Lambda表达式(或匿名方法)中所引用的外部变量称为捕获变量。而捕获变量的表达式就称为闭包。捕获变量 捕获的变量会在真正调用委托时“赋值”&#xff0c;而不是在捕获时“赋值”&#xff0c;即总是使用捕获变量的最新的值。如下代码所示&#xff0c;调用委托时&a…

java merge css_一句命令快速合并 JS、CSS

在项目开发环境下&#xff0c;我们会把 JS 代码尽可能模块化&#xff0c;方便管理和修改&#xff0c;这就避免不了会出现一个项目自身 JS 文件数量达到 10 个或者更多。而项目上线后&#xff0c;会要求将所有 JS 文件合并为 1 个或者几个&#xff0c;手动的操作虽然也不是问题&…

tomcat对于web.xml的security-constraint使用的处理机制

知识点 web.xml中<security-constraint> 的子元素 <http-method> 是可选的&#xff0c;如果没有 <http-method> 元素&#xff0c;这表示将禁止所有 HTTP 方法访问相应的资源。子元素 <auth-constraint> 需要和 <login-config> 相配合使用&#x…

重磅公开!36个高考数学破题大招

前段时间&#xff0c;超模君发了关于极值点偏移问题的总结资料&#xff0c;朋友们都觉得内容整合得十分详细。同时&#xff0c;也有不少很多朋友留言说希望有其他高考数学常考问题的解题总结。确实&#xff0c;毕竟高考涉及的内容非常多&#xff0c;比如说参数范围问题、数列求…

Linux服务器数据备份

2019独角兽企业重金招聘Python工程师标准>>> 服务器上的数据是如此重要&#xff0c;以至于我们定期要对其进行备份&#xff01;这里讲一下mysql的备份和使用rsync同步服务器上的文件&#xff0c;从而实现多台linux服务器之间的文件的备份。 一 Mysql备份 mysql的备份…

Serilog 日志框架如何自动删除超过 N 天的日志 ?

咨询区 JohnB&#xff1a;我的程序使用的日志框架是 Serilog&#xff0c;我是按天分割日志文件的&#xff0c;由于每日文件都比较大&#xff0c;我经常手工删除&#xff0c;但这样做很傻&#xff0c;请问日志框架有没有自动帮我删除 N 天之间的日志呢&#xff1f;回答区 someth…

linux进程通讯-纯文本文件

三)强制性加锁的实现1)对文件加锁有两种方式:劝告性锁和强制性锁.2)劝告性锁工作时,每个进程都要对文件进行读或写之前调用lockf对文件加锁,如果一个进程忘记调用lockf,那么锁协议将会被忽视3)强制性锁工作时,它将使任何一个想要访问已被加锁的文件的进程都堵塞在读或写队列上.…

java 数组长度 可变_java基础之集合长度可变的实现原理

首先我们要明白java中的集合Collection,List,ArrayList之间的关系:ArrayList是具体的实现类,实现了List接口List是接口,继承了Collection接口List继承了Collection接口 但是List是可以重复的并且有序的集合 Collection是不可重复且无序的这里我们先讲一下List集合:List接口不…