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

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

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

 

第一步:数据准备服务器

    这里使用的是DEMO数据,主要为了演示该方案的操做,具体使用的时候须要根据具体的数据状况进行调整:编码

表:datasspa

IDorm

DATAhtm

ROLEblog

1ci

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

相关文章
相关标签/搜索