一、摘要
开发 DocumentMS,一个企业级文档管理系统,支持基于角色的访问控制、SSO 单点登录、MinIO 对象存储、文件锁定协作、QR 码访问、虚拟云盘等功能,让团队成员安全高效地共享和管理文件。全程使用 Trae SOLO 辅助开发,一行代码没写。
二、背景
需要一套轻量级文档管理系统,但市面上的方案太多了不知道怎么选,就自己写吧,要不这篇文章怎么水出来呢,其实文章也是SOLO写的,我改了些句子,截了几张图。
下面内容随便看,解释权在AI和个人理解。
痛点:
-
现有网盘权限粒度太粗,无法按文件夹精细控制
-
需要与企业 SSO 集成,不希望单独管理用户账号
-
多人编辑 Office 文件没有锁定机制,经常出现冲突版本
-
需要扫码即可访问文件夹,适合车间/仓库等无键盘环境
-
需要一个 Windows 虚拟云盘客户端,像本地磁盘一样操作
现有工具的问题:
-
ShxPoint、Nxcloud 太重,部署维护成本高
-
网盘方案(如 Gxxgle Drive、xxxDrive)无法满足企业 SSO 集成
-
开源方案(如 Sxxxfile)权限模型不够灵活
于是我决定:用 AI 辅助开发,做一套专为自己使用的轻量级 DMS。
三、实践过程
1. 技术选型与架构
为什么选择这套技术栈:
┌─────────────────────────────────────────────────────────┐
│ Blazor Web App + WPF Client │
│ (用户浏览器) (Windows 虚拟云盘) │
└──────────────┬──────────────────────┬─────────────────────┘
│ │
┌──────────────▼──────────────────────▼─────────────────────┐
│ DocumentMS.Api (.NET 10) │
│ - ASP.NET Core Web API │
│ - JWT Bearer Authentication │
│ - CQRS Pattern with MediatR │
└──────────────┬─────────────────────────┬───────────────────┘
│ │
┌──────────────▼────────────┐ ┌────────▼────────────────────┐
│ PostgreSQL / SQLite │ │ MinIO (S3 对象存储) │
│ - EF Core │ │ - 文件存储 │
│ - 审计日志/权限/版本 │ │ - 预签名 URL 下载 │
└───────────────────────────┘ └─────────────────────────────┘
│
┌──────────────▼────────────┐
│ External SSO Server │
│ - OIDC 单点登录 │
│ - NATS 角色实时同步 │
└───────────────────────────┘
-
.NET 10 + Blazor Server - 现代 Web 框架,支持实时交互,开发效率高
-
DDD + Clean Architecture - 分层清晰,Domain 层无依赖,易于测试和维护
-
CQRS + MediatR - 读写分离,命令和查询各司其职
-
MinIO - S3 兼容对象存储,轻量、高性能
-
外部 SSO (OIDC) - 企业统一身份认证,不重复造轮子
-
NATS - 轻量消息系统,实现 SSO 角色变更实时同步
-
WPF Client - Windows 桌面应用,挂载虚拟云盘,自动锁定 Office/CAD 文件
2. SOLO 帮我做什么
项目初始化阶段:
-
搭建 DDD + Clean Architecture 分层项目结构
-
配置 .NET 10 项目依赖关系(Domain → Application → Infrastructure → Api/Blazor)
-
设置多数据库支持(SQLite 开发 / PostgreSQL 生产)
核心功能开发阶段:
-
文件夹树结构、文档上传/下载、版本控制
-
角色权限系统(按文件夹设置角色级别,控制访问层级)
-
SSO OIDC 集成 + 证书验证(自签名 CA)
-
QR 码生成与扫码下载流程
-
文件锁定机制(Office/CAD 临时文件检测)
-
审计日志记录(记录谁、何时、在哪个文件夹做了什么)
-
NATS 消息同步(SSO 角色变更后实时生效)
-
WPF 虚拟云盘客户端
部署与运维:
-
systemd 服务部署(Linux)
-
Docker Compose 部署(MinIO、NATS)
-
CI/CD 发布流程
3. 踩过的坑
坑1:SSO OIDC 的 Audience 和 Scope 混淆
问题:Token 没有 aud 声明,API 验证失败
原因:API Scope 没有关联到 API Resource
-
解决:在 SSO 中正确创建 API Resource → API Scope → Client 的顺序
-
记录:详细写入 SSO-OIDC-IMPLEMENTATION.md 供以后参考
坑2:自签名证书导致 SSO 连接失败
Error: The remote certificate is invalid
HttpRequestException: SSL connection could not be established
-
解决:实现自定义 CA 证书信任机制,不跳过验证,而是信任特定的根证书
-
记录:SSL_SETUP.md 文档
坑3:NATS 角色同步 Toast 通知不显示
-
原因:Blazor Server 后台线程无法直接渲染组件通知
-
解决:改用 JavaScript Interop 方式显示 Toast,匹配 SSO 应用的实现
坑4:WPF 虚拟云盘的文件锁定检测
-
原因:Office 文件编辑时会生成
~$临时文件,需要检测并锁定服务器上对应文件 -
解决:监控本地缓存目录,检测 Office/CAD 临时文件,触发服务器锁定事件
4. SOLO 提效点
项目搭建:
-
传统方式:查 DDD 架构文档 3 小时
-
用 SOLO:30 分钟完成
OIDC 集成:
-
传统方式:读 OIDC 规范 + 调试 2 天
-
用 SOLO:半天完成 + 自动生成配置文档
Bug 排查:
-
传统方式:grep 日志 + StackOverflow
-
用 SOLO:SOLO 分析错误上下文,直接给出解决方案
文档编写:
-
传统方式:复制粘贴 + 手动排版
-
用 SOLO:生成结构化 Markdown 文档(已生成 20+ 份文档)
四、成果展示
核心功能
文件夹管理 - 树形结构,支持无限层级嵌套
文档上传/下载 - 拖拽上传、进度条、批量操作
权限控制 - 按文件夹设置角色级别(Admin > Manager > User)
QR 码访问 - 扫码即可访问文件夹
审计日志 - 记录所有操作(谁、何时、在哪个文件夹做了什么)
多语言 - 中文/English 界面切换
虚拟云盘 - WPF 客户端,像本地磁盘一样操作
特色亮点
SSO 角色实时同步 - SSO 管理员创建/删除角色,通过 NATS 实时生效
自签名证书支持 - 信任特定 CA,不跳过 SSL 验证,安全合规
审计日志详细上下文 - 记录文件夹路径、用户角色、HTTP 请求等完整信息
虚拟云盘自动锁定 - 打开 Office 文件时自动锁定服务器对应文件,关闭时自动上传
一键部署 - systemd + Docker Compose,15 分钟完成部署
项目地址
-
仓库: 待上传github
-
License: AGPLV3
五、效果与总结
开发效率提升
开发周期:预计 4 周 → 实际 2 周完成核心功能
OIDC 集成时间:从读规范到调试成功 2 天 → SOLO 辅助半天完成
文档时间:从 0 到完整 README + 部署指南 + 20+ 份专题文档
SOLO 真正做了什么
-
架构建议 - 解释为什么要用 DDD + Clean Architecture(领域层无依赖,易于测试)
-
代码生成 - 快速实现 CRUD,节省 100% 编码时间,自己一行都没写
-
Bug 排查 - 分析 OIDC Audience、SSL 证书、NATS 同步等问题
-
文档辅助 - 生成清晰的 README、部署指南、SSO-OIDC 配置手册
可复用的方法
AI 辅助开发流程:
需求 → 拆解任务 → SOLO 生成代码 → 本地测试 → 迭代优化 → 文档沉淀
DDD 架构设计:
-
Domain 层定义实体、值对象、领域事件(纯 C#,无外部依赖)
-
Application 层定义 Commands/Queries(CQRS 模式)
-
Infrastructure 层实现 Repository、外部服务(MinIO、SSO、NATS)
-
Api/Blazor 层只负责展示和依赖注入
OIDC 集成最佳实践:
-
SSO 是 Source of Truth,所有名称必须与 SSO 配置一致
-
配置顺序:API Resource → API Scope → Client → appsettings.json
-
aud声明是从 Scope 关联的 API Resource 自动派生的 -
自定义 CA 证书信任机制,不跳过 SSL 验证
六、参赛感言
用 SOLO 开发 DocumentMS,让我真正体验到了"单人+AI"的可能性。
以前觉得做一个完整的应用,不知道要多久,现在发现:
-
有想法 → SOLO 帮你落地
-
有问题 → SOLO 帮你分析
-
有 Bug → SOLO 帮你排查
-
有知识 → SOLO 帮你沉淀为文档
一人一 AI,照样能做完整的产品。
这就是 AI 编程给普通开发者的机会。
#Code with SOLO #AI编程 #DMS #Blazor #DDD #CleanArchitecture



