历史版本23 :权限细粒度参数控制 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
10.0

1.2 功能简介

用户认证后会将报表三个固定的默认参数$fine_username$fine_role$fine_position保存在 Session 中,同时提供两个函数GETUSERDEPARTMENTS()GETUSERJOBTITLES()来分别获取部门角色的部门和职位。

同一报表环境下,模板中可以直接以参数的形式获取到对应的值,然后在模板里面进行筛选判断就可显示不同数据及样式。

2. 参数介绍编辑

注1:模板挂载到平台的方法请参见:节点管理

注2:给用户分配权限请参见:根据用户分配权限示例

2.1 $fine_username

获取登录系统的用户名,例如登录用户名为 Anna,那么$fine_username=Anna

2.1.1 示例一

用户hanwen登录系统访问模板时只能看到自己的销量。

1)在 FineReport 设计器中点击文件>新建普通报表,新建数据库查询 ds1:

SELECT * FROM 销量 where 英文简称='${fine_username}'

2)模板设计如下图所示:

1589853535492150.png

3)管理员将设计好的模板挂载到数据决策系统中,并将该模板的查看权限分配给hanwen,hanwen 登录数据决策系统访问模板时,模板自动筛选 hanwen 的信息。如下图所示:

1589853747672856.png

2.1.2 示例二

${fine_username}参数可在「参数面板」中使用。

1)在 FineReport 设计器中点击文件>新建普通报表,新建数据库查询 ds1:

SELECT * FROM 销量 where 英文简称='${fine_username}'

2)模板设计如下图所示:

1589853535492150.png

3)在参数面板中添加下拉框控件查询控件

选中下拉框控件,控件名称为fine_username,并设置数据字典。如下图所示:

4.png

4)点击分页预览,可通过销售员过滤数据。如下图所示:

1589855506300193.png

2.2 $fine_role

获取登录系统的角色。若管理员用户登录,$fine_role=SUPERROLE;若角色用户登录,例如角色「数据架构师」用户登录,$fine_role=数据架构师;若部门角色登录,该参数为空,$fine_role 返回值为数组,使用concatenate($fine_role,"")即可将其转化为字符串。

注1:为用户添加角色或部门的方法请参见:用户管理

注2:若一个用户有多个角色,$fine_role 返回值为所有角色,例如:数据架构师,普通角色1

2.2.1 示例一

希望不同角色访问模板时,查看到的模板列数不同、行列颜色不同。可以给行列添加条件属性设置行高、列宽、背景等,如果登录系统用户为角色用户,可以在公式中通过$fine_role进行过滤,如果是部门职位用户,则不可使用该参数进行过滤。

注:条件属性具体内容可参见: 条件属性 

1)在 FineReport 设计器中点击文件>新建普通报表,新建数据库查询 ds1:

SELECT * FROM 销量 where 英文简称='${fine_username}'

2)模板设计如下图所示:

1589853535492150.png

3)若 hanwen 角色为「数据架构师」,希望 hanwen 登录平台访问模板时,不能查看销量列。则选中E2单元格,添加条件属性列宽,公式为$fine_role='数据架构师',如下图所示:

注:若一个用户有多个角色,公式为find('数据架构师',$fine_role)>0

6.png

4)管理员将设计好的模板挂载到数据决策系统中,并将该模板的查看权限分配给hanwen,hanwen 登录数据决策系统访问模板时,效果如下图所示:

1589857480499388.png

2.2.2 示例二

若 hanwen 为部门职位用户,部门为销售部,职位为 sale,那么本文3.2.1节第三步骤中公式为:GETUSERDEPARTMENTS()='销售部'GETUSERJOBTITLES()='sale',如下图所示:
1589857812911990.png

2.3 $fine_position

获取部门职位。返回值由部门和职位组成,为 json 格式。

例如「人力资源部长」职位登录系统,那么$fine_position={"departments":"人力资源","jobTitle":"部长"}

2.4 GETUSERDEPARTMENTS()

获取部门职位里的部门。

例如「人力资源部长」职位登录系统,那么GETUSERDEPARTMENTS()=人力资源

若多个部门,则数组GETUSERDEPARTMENTS(3,2)返回角色该部门的第三层和第二层名字。若多个部门则返回数组,若没有第三层则只显示第二层。

2.5 GETUSERJOBTITLES()

获取部门职位里面的职位。

例如「人力资源部长」职位登录系统,那么GETUSERJOBTITLES()=部长

注1:$fine_username、$fine_role、$fine_position 为报表默认参数,调用时大小写必须保持一致。

注2:$fine_username、$fine_role、$fine_position 参数在 9.0 里分别对应 $fr_username、$fr_authority、$fr_userposition。