Commit 76477bbb1844bdf390a4c4d2dd4e8f3e77107f9d

Authored by YunaiV
1 parent f743ffd1

feat:【report】增强对报表的安全集成,对应 https://t.zsxq.com/yzlkA 反馈的问题

yudao-module-report/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.java
... ... @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.report.framework.jmreport.core.service;
2 2  
3 3 import cn.hutool.core.util.ObjectUtil;
4 4 import cn.hutool.core.util.StrUtil;
  5 +import cn.iocoder.yudao.framework.common.biz.system.oauth2.OAuth2TokenCommonApi;
  6 +import cn.iocoder.yudao.framework.common.biz.system.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
5 7 import cn.iocoder.yudao.framework.common.biz.system.permission.PermissionCommonApi;
6 8 import cn.iocoder.yudao.framework.common.exception.ServiceException;
7 9 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
... ... @@ -10,9 +12,6 @@ import cn.iocoder.yudao.framework.security.core.LoginUser;
10 12 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
11 13 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
12 14 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
13   -import cn.iocoder.yudao.framework.common.biz.system.oauth2.OAuth2TokenCommonApi;
14   -import cn.iocoder.yudao.framework.common.biz.system.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
15   -import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
16 15 import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
17 16 import jakarta.servlet.http.HttpServletRequest;
18 17 import lombok.RequiredArgsConstructor;
... ... @@ -158,4 +157,33 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
158 157 return StrUtil.toStringOrNull(loginUser.getTenantId());
159 158 }
160 159  
  160 + @Override
  161 + public String[] getPermissions(String token) {
  162 + // 设置租户上下文
  163 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
  164 + if (loginUser == null) {
  165 + return null;
  166 + }
  167 + TenantContextHolder.setTenantId(loginUser.getTenantId());
  168 +
  169 + // 参见文档 https://help.jimureport.com/prodSafe/ 文档
  170 + // 适配:如果是本系统的管理员,则返回积木报表(仪表盘/大屏设计器)的所有权限指令
  171 + // 如果不处理,会碰到 https://t.zsxq.com/yzlkA 反馈的问题
  172 + Long userId = SecurityFrameworkUtils.getLoginUserId();
  173 + if (permissionApi.hasAnyRoles(userId, RoleCodeEnum.SUPER_ADMIN.getCode())) {
  174 + return new String[]{
  175 + "drag:datasource:testConnection", // 数据库连接测试
  176 + "drag:datasource:saveOrUpate", // 数据源保存
  177 + "drag:datasource:delete", // 数据源删除
  178 + "drag:analysis:sql", // SQL解析
  179 + "drag:design:getTotalData", // 展示Online表单数据
  180 + "drag:dataset:save", // 数据集保存
  181 + "drag:dataset:delete", // 数据集删除
  182 + "onl:drag:clear:recovery", // 清空回收站
  183 + "onl:drag:page:delete" // 数据删除
  184 + };
  185 + }
  186 + return null;
  187 + }
  188 +
161 189 }
... ...