历史版本8 :模板认证下的超级链接继承权限 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本

JAR 包版本

10.02019-12-05

1.2 问题描述

报表中设置了网络报表类型的超级链接,如果用户没有超级链接指向的子报表的权限,那么用户在点击了超级链接后是否可以查看子报表呢?超级链接的子报表是否可以继承主报表的权限呢?

下面将梳理超级链接继承权限的逻辑。让用户可以清晰了解 FineReport 超级链接继承权限避免权限泄露的方法。

注1:由于 URL 中超链跳转会带上 hyperlinktoken,因而在半小时有效期内,拥有该 token 就能查看其他所有模板的数据,这会导致越权访问。故2019-12-05及之后版本的 JAR 包加上了用户登录限制。

注2:FineReport 无分享功能,所谓的分享就是拷贝当前报表的 URL 给其他人。

2. 逻辑说明编辑

用户可以在两种场景下打开 FineReport 报表:在决策平台打开和不在决策平台平台打开。

这两种场景下配置报表权限的方式是相同的,都是通过模板认证配置模板权限,模板认证的详细内容参见:模板认证

注:只有超链方式为模板路径时,超链权限才能继承。以下两种方式不支持权限继承:

1)参数直接写在模板路径后面

2)网页链接中填写模板预览 URL

2.1 报表在决策平台打开

如果用户直接使用 FineReport 决策平台打开报表,该场景下只有三种类型的模板访问方式校验模板权限:模板类型首页、通过链接挂载模板的首页、通过链接挂载模板的目录。

平台目录直接挂载模板不校验模板权限,只需要在权限管理>权限配置给对应用户配置目录权限,用户即可正常查看模板内容。

如果用户没有超链打开的子报表的权限,这个时候想要查看该子报表,就需要让子报表继承主报表的权限,因为如果再去设置一遍子报表的模板认证权限会比较繁琐。

为了便于理解,给出详细的用户操作场景示例说明(此处只介绍角色认证场景)

操作场景
认证&权限2019-12-05之后版本 JAR 包查看超链子表

用户A登录平台>打开报表1>超链到报表2

报表2需要认证

用户A无报表2的权限

新窗口/平台内新标签/对话框/当前页/平台内当前标签页打开:都能直接查看报表2

用户A登录平台>打开报表1>超链到报表2>拷贝报表2的 URL 到新的浏览器

报表2需要认证

用户A无权限

用户B有权限

用户C无权限

提示登录,用户A登录后:

token 未超时前可查看报表2

token 超时后不可查看,需要重新用报表1的超链打开

提示登录,用户B登录后:

可以查看报表2,且模板数据会按用户B的权限进行过滤

提示登录,用户C登录后:

提示没有权限

用户A登录平台>打开报表1>超链到报表2>拷贝报表2的 URL 到同一浏览器的新标签页

报表2需要认证

用户A无报表2的权限

token 未超时前可查看报表2

token 超时后不可查看,需要重新用报表1的超链打开

2.2 报表不在决策平台打开

如果用户将报表集成到自己的系统中打开,该场景下用户也需要通过模板认证配置模板权限。

这个时候超链打开的子报表,也需要继承主报表权限。这个也很常见,因为在报表很多的情况下,管理员通常只会设置主报表的权限,超链的子报表可能会很多,这个时候如果逐个设置权限会很麻烦。

同样为了便于理解,给出详细的用户操作场景示例说明:

1)角色权限认证

操作场景认证&权限2019-12-05之后版本 JAR 包查看超链子表
用户A>打开报表1>超链到报表2

报表1和报表2都需要认证

用户A有报表1的权限,无报表2的权限

token 未超时前用户A可直接查看报表2

token 超时后提示登录,用户A登录不可查看报表2,需要重新用报表1的超链打开,且报表1也需要重新登录

用户A>打开报表1>超链到报表2>拷贝报表2的 URL 到新的浏览器

报表1和报表2都需要认证

用户A有报表1的权限,无报表2的权限

用户B有报表2的权限

提示登录,用户A登录后:

token 未超时前可查看报表2

token 超时后提示登录,用户A登录后不可查看报表2,需要重新用报表1的超链打开

提示登录,用户B登录后:

可正常查看报表2中的有权限数据

用户A>打开报表1>超链到报表2>拷贝报表2的 URL 到同一浏览器的新标签页

报表2需要认证

用户A无报表2的权限

token 未超时前用户A无需登录可查看报表2

token 超时后提示登录,用户A登录后不可查看报表2,需要重新用报表1的超链打开

2)仅认证用户密码

操作场景认证&权限2019-12-05之后版本 JAR 包查看超链子表
用户A>打开报表1>超链到报表2报表2都需要认证

token 未超时前用户A可查看报表2

token 超时后用户A刷新报表2,提示登录,任意用户登录可正常查看报表2内容

用户A>打开报表1>超链到报表2>拷贝报表2的 URL 到新的浏览器

报表1和报表2都需要认证

提示登录,用户A登录后:

token 未超时前可查看报表2

超时需要重新登录,登录后正常查看

提示登录,用户B登录后:

token 未超时前可查看报表2中有权限的数据

超时需要重新登录,登录后正常查看

用户A>打开报表1>超链到报表2>拷贝报表2的 URL 到同一浏览器的新标签页报表2需要认证token 未超时前用户A无需登录即可查看报表2

token 超时后用户A需重新登录可正常

3)数字签名

操作场景认证&权限2019-12-05之后版本 JAR 包查看超链子表
用户A>打开报表1>超链到报表2报表1和报表2都需要认证

token 未超时前用户A可查看报表2

token 超时后报表2不可查看,需要重新用报表1的超链打开,但要确保报表1的数字签名未超时,否则无效

用户A>打开报表1>超链到报表2>拷贝报表2的 URL 到新的浏览器
用户A>打开报表1>超链到报表2>拷贝报表2的 URL 到同一浏览器的新标签页

4)不开启认证

操作场景2019-12-05之后版本 JAR 包查看超链子表
打开报表1>超链到报表2不需要登录,可一直查看报表1和报表2内容
打开报表1>超链到报表2>拷贝报表2的 URL 到新的浏览器不需要登录,可一直查看报表1和报表2内容
打开报表1>超链到报表2>拷贝报表2的 URL 到同一浏览器的新标签页不需要登录,可一直查看报表1和报表2内容