超级链接继承权限

  • 文档创建者:Leo.Tsai
  • 编辑次数:6次
  • 最近更新:Leo.Tsai 于 2019-12-08
  • 1. 概述

    1.1 版本

    报表服务器版本

    JAR 包版本

    10.02019-12-05

    1.2 问题描述

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

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

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

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

    2. 逻辑说明

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

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

    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内容


    附件列表


    主题: 报表设计
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!