3.3 KiB
3.3 KiB
🚨 立即执行 - 出国申请附件下载修复指南
问题现象
点击出国申请详情中的附件下载按钮时,提示 Access Denied 错误。
快速修复步骤
1️⃣ 执行数据库SQL(⏱️ 1分钟)
# 位置:docs/设计文档/database/【立即执行】出国申请表添加OSS_ID字段.sql
# 内容:添加 stamped_file_oss_id 和 party_retention_file_oss_id 字段
执行命令:
-- 连接数据库后执行
source docs/设计文档/database/【立即执行】出国申请表添加OSS_ID字段.sql;
2️⃣ 重启后端服务(⏱️ 2分钟)
代码已自动修改完成,包括:
- ✅ Domain实体类添加OSS ID字段
- ✅ 上传接口改造(存储OSS ID)
- ✅ 新增下载代理接口
- ✅ Service层方法更新
需要操作:重启后端服务使代码生效
3️⃣ 刷新前端页面(⏱️ 10秒)
前端下载逻辑已修改为调用后端代理接口
需要操作:浏览器刷新页面(Ctrl+F5 / Cmd+Shift+R)
✅ 验证步骤
- 上传测试:新上传一个盖章文件,检查数据库中是否有
stamped_file_oss_id - 下载测试:点击下载按钮,确认可以正常下载
- 权限测试:未登录用户访问下载链接,应该被拦截
📊 改造文件清单
后端文件(已修改)
backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/RsOverseasApplication.javabackend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/RsOverseasApplicationVo.javabackend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsOverseasApplicationController.javabackend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/service/IRsOverseasApplicationService.javabackend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/service/impl/RsOverseasApplicationServiceImpl.java
前端文件(已修改)
web/src/views/rs/overseas/index.vue
数据库脚本(待执行)
docs/设计文档/database/【立即执行】出国申请表添加OSS_ID字段.sql
🎯 核心改动说明
改动前
前端 → 直接访问OSS URL → ❌ Access Denied
改动后
前端 → 后端代理接口 → 权限验证 → OSS安全下载 → ✅ 下载成功
⚠️ 重要提示
旧数据兼容性
已存在的文件没有OSS ID,有以下处理方案:
方案1(推荐):让用户重新上传
- 优点:简单直接,数据干净
- 缺点:需要用户操作
方案2:编写数据迁移脚本
- 优点:自动处理
- 缺点:需要开发额外脚本
方案3:保留兼容逻辑
- 在下载接口中添加降级处理:如果没有OSS ID,尝试使用文件路径
📚 详细文档
完整的改造方案和技术细节请参考:
docs/开发文档/出国申请附件下载权限修复方案.md
🔍 故障排查
Q1: 执行SQL后仍然下载失败?
A: 检查后端服务是否重启,前端页面是否刷新
Q2: 新上传的文件也下载失败?
A: 检查sys_oss表中是否有对应记录,检查OSS配置是否正确
Q3: 提示"无权限"?
A: 检查用户是否有rs:overseas:query权限
执行时间:约3-5分钟
风险等级:🟢 低(只增加字段,不修改已有数据)
回滚方案:删除新增的两个字段即可
日期:2025-01-10