1. 概述
1.1 版本
报表服务器版本 | 功能变更 |
---|---|
11.0 | - |
11.0.31 | 新增参数$fine_role_id,避免角色重命名导致权限配置失效 |
1.2 功能简介
用户认证 后会将报表三个固定的默认参数$fine_username、$fine_role、$fine_position保存在 Session 中。
同时提供两个函数GETUSERDEPARTMENTS()、GETUSERJOBTITLES()来分别获取部门角色的部门和职位。
同一报表环境下,模板中就可以直接以参数的形式获取到对应的值,然后在模板里面进行筛选判断就可以显示不同数据及样式。
1.3 参数简介
权限细粒度相关的参数和函数如下表所示:
注1:$fine_username、$fine_role、$fine_position 是 FineReport 默认的参数,所以调用时大小写必须保持一致。
注2:不支持模拟计算。
参数 | 说明 | 示例 |
---|---|---|
$fine_username | 获取登录系统的用户名 | 例如登录用户名为 Anna $fine_username=Anna |
$fine_display_name | 获取登录系统的姓名(用户名) | 例如登录用户名为 安娜(Anna) $fine_display_name=安娜(Anna) 如果只想获取登录用户的姓名安娜(请注意姓名可能存在重名情况) left($fine_display_name,find("(",$fine_display_name)-1)=安娜 |
$fine_role | 获取登录系统的角色 (请注意角色的名称更改后,权限会失效,建议使用下一个角色ID进行权限配置) | 1)若登录用户为超级管理员 $fine_role=superusers 2)若登录用户角色为自定义角色(例如:数据架构师) $fine_role=数据架构师 3)若登录用户无角色 该参数值为空 4)若登录用户存在多个角色「角色1」「角色2」 $fine_role=角色1,角色2 |
$fine_role_id | 获取登录系统的角色ID | 1)若登录用户为超级管理员 $fine_role_id=super-user-custom-role 2)若登录用户角色为自定义角色 (例如:数据架构师,id为7b37b885-190d-4db0-b3d3-bf2d15285447) $fine_role_id=7b37b885-190d-4db0-b3d3-bf2d15285447 3)若登录用户无角色 该参数值为空 4)若登录用户存在多个自定义角色「角色1」「角色2」 $fine_role_id=角色1的id,角色2的id |
$fine_position | 获取部门职位,返回值为一个由部门和职位组成的数组 | 1)若登录用户为「人力资源-部长」 $fine_position={"departments":"人力资源","jobTitle":"部长"} 2)若登录用户为「人力资源-部长」兼「领导部-部长」 $fine_position={"departments":"人力资源","jobTitle":"部长"},{"departments":"领导部","jobTitle":"部长"} 3)若登录用户无部门职位 该参数值为空 |
GETUSERDEPARTMENTS() | 获取部门职位里面的部门 若部门存在多个层级,返回全部层级 若存在多个部门,返回全部部门 | 1)若登录用户为「人力资源-部长」 GETUSERDEPARTMENTS()=人力资源 2)若登录用户为「销售部-华东销售部-组长」 GETUSERDEPARTMENTS()=销售部,华东销售部 3)若登录用户为「人力资源-部长」兼「领导部-部长」 GETUSERDEPARTMENTS()=人力资源,领导部 4)若登录用户无部门 该参数值为空 |
GETUSERDEPARTMENTS(X) | 获取部门职位里面的第X层部门 若不存在X层部门,则返回空值 | 1)若登录用户为「销售部-华东销售部-华东销售1组-组长」 GETUSERDEPARTMENTS(3)=华东销售1组 GETUSERDEPARTMENTS(3,2)=华东销售1组,华东销售部 2)若登录用户为「销售部-华东销售部-组长」 GETUSERDEPARTMENTS(3)为空值 GETUSERDEPARTMENTS(3,2)=华东销售部 |
GETUSERJOBTITLES() | 获取部门职位里面的职位 若存在多个职位,返回全部职位 | 1)若登录用户为「人力资源-部长」 GETUSERJOBTITLES()=部长 2)若登录用户为「人力资源-部长」兼「领导部-president」 GETUSERJOBTITLES()=部长,president 3)若登录用户无职位 该参数值为空 |
2. 示例一:根据登录名限制数据内容
本文示例:
数据决策系统中存在用户sunlin和hanwen。
数据库「销量」表中,存在数据列「英文简称」,该列数据和数据决策系统中的用户名对应。
根据「销量」表创建了模板「根据登录名限制数据内容」并挂载到数据决策系统目录中。
sunlin和hanwen登录系统,查看该模板,只能看到自己的销售数据,看不到其他内容。
注:本章使用的是数据集参数作为示例,用户也可使用模板数据集。
2.1 新建模板
打开设计器,新建一张普通报表。
新建数据库查询ds1:SELECT * FROM 销量 where 英文简称='${fine_username}'
获取登录系统的用户名,例如登录用户名为sunlin,那么$fine_username=sunlin。
如下图所示:
2.2 设计模板
模板样式设计如下图所示:
2.3 平台挂载模板
管理员登录数据决策系统,点击「管理系统>目录管理」,选择「管理目录」,点击「添加模板」。
选择上一节制作的模板「根据登录名限制数据内容」,点击「下一步」。挂载类型选择「预览」,展示终端勾选「PC」,点击「确定」。如下图所示:
2.4 配置模板查看权限
管理员登录数据决策系统,点击「管理系统>权限管理>普通权限配置」。
选择权限载体为「所有部门」,为其分配目录「根据登录名限制数据内容」的「查看」权限,如下图所示:
2.5 效果预览
用户sunlin(sunlin,123456)登录数据决策系统,查看该模板,只能看到自己的销售内容。如下图所示:
用户hanwen(hanwen,123456)登录数据决策系统,查看该模板,只能看到自己的销售内容。如下图所示:
2.6 已完成模板
已完成模板请参见:根据登录名限制数据内容.cpt
注:请确保平台存在模板中对应的用户sunlin和hanwen,否则无法正确展示最终效果。
3. 示例二:根据登录角色限制显示行列
希望不同角色访问模板时,查看到的模板列数不同、行列颜色不同。可以给行列添加条件属性设置行高、列宽、背景等
本章示例:
数据决策系统中有角色「编外人员」,用户Anna属于该角色,用户Alice不属于该角色。
目录中挂载了一张模板,模板中存在列「销量」。
不属于角色「编外人员」的用户Alice登录数据决策系统查看该模板时,可以看到列「销量」。
属于角色「编外人员」的用户Anna登录数据决策系统查看该模板时,看不到列「销量」。
3.1 新建模板
打开设计器,新建一张普通报表。
新建数据库查询ds1:SELECT * FROM 销量
如下图所示:
3.2 设计模板
模板样式设计如下图所示:
3.3 设置条件属性
选中E2单元格,点击右侧配置栏「条件属性」,新增一个条件属性。
设置属性为列宽=0毫米。设置条件类型为公式,公式内容为$fine_role='编外人员',点击「增加」,如下图所示:
注:若一个用户有多个角色,公式为find('编外人员',$fine_role)>0
3.4 平台挂载模板
管理员登录数据决策系统,点击「管理系统>目录管理」,选择「管理目录」,点击「添加模板」。
选择上一节制作的模板「根据登录角色限制显示行列」,点击「下一步」。挂载类型选择「预览」,展示终端勾选「PC」,点击「确定」。如下图所示:
3.5 配置模板查看权限
管理员登录数据决策系统,点击「管理系统>权限管理>普通权限配置」。
选择权限载体为「所有部门」,为其分配目录「根据登录角色限制显示行列」的「查看」权限,如下图所示:
3.6 效果预览
不属于角色「编外人员」的用户Alice(Alice,123456)登录数据决策系统查看该模板时,可以看到列「销量」。如下图所示:
属于角色「编外人员」的用户Anna(Anna,123456)登录数据决策系统查看该模板时,看不到列「销量」。如下图所示:
3.7 已完成模板
已完成模板请参见:根据登录角色限制显示行列.cpt