# 学院资料归档 / College Archive

**工程案例 · Vue 3 + Spring Boot · 源码审阅：2026-10-13**

## 问题

教师资料需要按学院与个人归档。同名文件重新上传后，需要保留版本关系；审核人员需要看见待审核材料与驳回原因，而文件搜索、下载和清单导出应沿用同一套访问范围。

## 已有实现

| 环节 | 源码中可确认的行为 |
| --- | --- |
| 上传 | 前端逐文件上传并反馈批次进度；后端校验非空、大小、扩展名和分类权限 |
| 版本 | 同一上传人的同名有效文件递增版本号，并记录上一版本 ID |
| 访问范围 | 教师查看本人文件；管理员与超级管理员查询所属学院文件 |
| 审核 | 管理角色执行通过或驳回；驳回必须填写原因，记录审核者与时间 |
| 查询与导出 | 列表、CSV 清单与打印清单复用相同的查询范围 |
| 留痕 | 上传、编辑、审核、下载、导出、预览和逻辑删除写入操作日志 |

系统将文件元数据、审核状态与磁盘文件分开管理。存储文件名使用随机标识，页面显示用户提交的原始文件名；逻辑删除保留元数据，为后续审计与保留期管理提供基础。

## 值得阅读的工程判断

1. **授权属于服务端边界。** 页面隐藏按钮只能改善体验，下载、审核与清单接口仍需校验文件所属范围。
2. **版本与审核是两个维度。** 版本表达内容演进，审核表达当前材料是否符合要求，二者不能共用一个状态字段。
3. **数据库事务不包含磁盘写入。** 代码在元数据插入失败时清理刚写入的文件；更完整的实现仍需处理日志失败、进程中断与残留文件回收。

## 研究延伸

可以进一步研究跨角色流程中的授权一致性：给定相同角色与资源，查询、下载、审核和导出是否得到一致的权限结果？一个可执行的下一步是建立角色 × 学院 × 文件状态的测试矩阵，再用越权反例验证策略。

## 证据与限制

本案例依据本地实现与页面源码整理，本轮没有启动归档系统或重跑集成测试。未找到经过核验的业务页面截图，因此不以背景图替代真实操作证据。版本递增尚需并发上传测试；文件扩展名校验不等于恶意文件扫描；日志持久化不等于防篡改审计。Office 专业预览、断点续传与外部扫描服务仍需单独实现或集成。

公开内容仅包含工程分析；原始配置、数据库、文件附件、用户资料与完整源码不在本案例中。
