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,6 +2,8 @@ package cn.iocoder.yudao.module.report.framework.jmreport.core.service;
2 2
3 import cn.hutool.core.util.ObjectUtil; 3 import cn.hutool.core.util.ObjectUtil;
4 import cn.hutool.core.util.StrUtil; 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 import cn.iocoder.yudao.framework.common.biz.system.permission.PermissionCommonApi; 7 import cn.iocoder.yudao.framework.common.biz.system.permission.PermissionCommonApi;
6 import cn.iocoder.yudao.framework.common.exception.ServiceException; 8 import cn.iocoder.yudao.framework.common.exception.ServiceException;
7 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; 9 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
@@ -10,9 +12,6 @@ import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -10,9 +12,6 @@ import cn.iocoder.yudao.framework.security.core.LoginUser;
10 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; 12 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
11 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 13 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
12 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; 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 import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; 15 import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
17 import jakarta.servlet.http.HttpServletRequest; 16 import jakarta.servlet.http.HttpServletRequest;
18 import lombok.RequiredArgsConstructor; 17 import lombok.RequiredArgsConstructor;
@@ -158,4 +157,33 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI { @@ -158,4 +157,33 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
158 return StrUtil.toStringOrNull(loginUser.getTenantId()); 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 }