2026-04-09 15:30:26 +08:00
|
|
|
|
# User Management System (UMS)
|
2026-04-02 03:01:14 +00:00
|
|
|
|
|
2026-04-09 15:30:26 +08:00
|
|
|
|
企业级用户管理系统,支持 RBAC 角色权限管理、多因素认证、设备信任和安全审计。
|
|
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
### 安装 UMS CLI
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
# 下载对应平台的二进制文件
|
|
|
|
|
|
# Linux/macOS
|
|
|
|
|
|
curl -L -o ums https://github.com/user-management-system/ums/releases/latest/download/ums-linux-amd64
|
|
|
|
|
|
chmod +x ums
|
|
|
|
|
|
|
|
|
|
|
|
# Windows
|
|
|
|
|
|
curl -L -o ums.exe https://github.com/user-management-system/ums/releases/latest/download/ums-windows-amd64.exe
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
# 或使用 Go 安装
|
|
|
|
|
|
go install github.com/user-management-system/cmd/ums@latest
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 初始化系统
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-04-19 08:59:00 +08:00
|
|
|
|
# 交互式初始化(推荐)
|
|
|
|
|
|
ums init
|
|
|
|
|
|
|
|
|
|
|
|
# 非交互式初始化
|
|
|
|
|
|
ums init \
|
|
|
|
|
|
--admin-user admin \
|
|
|
|
|
|
--admin-pass MySecretPassword123 \
|
|
|
|
|
|
--admin-email admin@example.com \
|
|
|
|
|
|
--cors-origin http://localhost:3000
|
|
|
|
|
|
```
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
初始化命令会:
|
|
|
|
|
|
1. 生成安全的 JWT 密钥
|
|
|
|
|
|
2. 创建配置文件 `config.yaml` 和 `.env`
|
|
|
|
|
|
3. 创建数据库目录并执行迁移
|
|
|
|
|
|
4. 初始化默认角色、权限和管理员账号
|
|
|
|
|
|
|
|
|
|
|
|
### 启动服务
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
ums serve
|
2026-04-09 15:30:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
服务启动后访问 `http://localhost:8080/health` 确认服务正常运行。
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
### 前端
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd frontend/admin
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
.
|
2026-04-19 08:59:00 +08:00
|
|
|
|
├── cmd/
|
|
|
|
|
|
│ ├── ums/ # UMS CLI 入口
|
|
|
|
|
|
│ │ └── cmd/ # CLI 子命令
|
|
|
|
|
|
│ │ ├── init.go # 初始化命令
|
|
|
|
|
|
│ │ ├── serve.go # 服务启动命令
|
|
|
|
|
|
│ │ └── version.go # 版本命令
|
|
|
|
|
|
│ └── server/ # 后端服务入口
|
2026-04-09 15:30:26 +08:00
|
|
|
|
├── internal/ # 后端代码
|
|
|
|
|
|
│ ├── api/handler/ # HTTP 处理器
|
|
|
|
|
|
│ ├── api/middleware/ # 中间件(认证、权限、限流)
|
|
|
|
|
|
│ ├── auth/ # 认证服务(JWT/SSO)
|
|
|
|
|
|
│ ├── repository/ # 数据访问层
|
|
|
|
|
|
│ ├── service/ # 业务逻辑层
|
2026-04-19 08:59:00 +08:00
|
|
|
|
│ ├── server/ # 服务器核心逻辑
|
2026-04-09 15:30:26 +08:00
|
|
|
|
│ └── domain/ # 领域模型
|
|
|
|
|
|
├── frontend/admin/ # 管理后台前端
|
|
|
|
|
|
├── configs/ # 配置文件
|
|
|
|
|
|
├── docs/ # 详细文档
|
2026-05-29 21:33:58 +08:00
|
|
|
|
│ ├── code-review/ # Review 报告与修复记录
|
|
|
|
|
|
│ └── status/ # 项目状态文档
|
2026-04-09 15:30:26 +08:00
|
|
|
|
└── data/ # SQLite 数据库目录
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-05-29 21:33:58 +08:00
|
|
|
|
## 项目状态
|
|
|
|
|
|
|
|
|
|
|
|
当前状态:**B / 有条件就绪** (2026-05-29)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ 后端构建: `go build ./cmd/server` PASS
|
|
|
|
|
|
- ✅ 后端测试: `go test ./...` PASS
|
|
|
|
|
|
- ✅ 前端构建: `npm run build` PASS
|
|
|
|
|
|
- ✅ 前端测试: `npm run test:run` PASS (522 tests)
|
|
|
|
|
|
- ✅ 安全审计: `npm audit` 0 vulnerabilities
|
|
|
|
|
|
- ✅ P0 Blocker: 5/5 已修复
|
|
|
|
|
|
- ✅ P1 重要问题: 5/5 已修复
|
|
|
|
|
|
- ⚠️ P2 优化项: 进行中(覆盖率提升)
|
|
|
|
|
|
|
|
|
|
|
|
详见:[docs/status/REAL_PROJECT_STATUS.md](docs/status/REAL_PROJECT_STATUS.md)
|
|
|
|
|
|
|
2026-04-09 15:30:26 +08:00
|
|
|
|
## 核心功能
|
|
|
|
|
|
|
|
|
|
|
|
| 功能 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| 用户管理 | 注册、登录、CRUD、批量操作 |
|
|
|
|
|
|
| RBAC | 角色继承、权限细粒度控制 |
|
|
|
|
|
|
| TOTP | Google Authenticator 二次验证 |
|
|
|
|
|
|
| 设备信任 | 信任设备免二次验证 |
|
|
|
|
|
|
| 登录日志 | 完整操作审计 |
|
|
|
|
|
|
| Webhook | 事件通知(user.created/deleted 等)|
|
|
|
|
|
|
| SSO | CAS 协议支持 |
|
|
|
|
|
|
|
2026-04-18 21:30:14 +08:00
|
|
|
|
## 安全特性
|
|
|
|
|
|
|
|
|
|
|
|
| 安全修复 | 状态 |
|
|
|
|
|
|
|----------|------|
|
|
|
|
|
|
| LIKE 查询 SQL 注入防护 | ✅ 已修复 |
|
|
|
|
|
|
| 登录失败计数器原子操作 | ✅ 已修复 |
|
|
|
|
|
|
| Refresh Token 黑名单 fail-closed | ✅ 已修复 |
|
|
|
|
|
|
| 验证码 Replay 防护 | ✅ 已修复 |
|
|
|
|
|
|
| CORS 危险配置检测 | ✅ 已修复 |
|
|
|
|
|
|
| UpdateUser IDOR 授权检查 | ✅ 已修复 |
|
|
|
|
|
|
| Login TOTP 设备信任门禁 | ✅ 已修复 |
|
|
|
|
|
|
| 游标分页排序一致性 | ✅ 已修复 |
|
|
|
|
|
|
| 错误信息泄露防护 | ✅ 已修复 |
|
|
|
|
|
|
| OAuth context 正确传播 | ✅ 已修复 |
|
|
|
|
|
|
| 密码修改后 Token 失效(PCE) | ✅ 已修复 |
|
|
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
## CLI 命令
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
ums init # 初始化系统(交互式或非交互式)
|
|
|
|
|
|
ums serve # 启动服务器
|
|
|
|
|
|
ums version # 显示版本信息
|
|
|
|
|
|
|
|
|
|
|
|
# ums serve 选项
|
|
|
|
|
|
ums serve --port 8080 # 指定端口
|
|
|
|
|
|
ums serve --config ./prod.yaml # 指定配置文件
|
|
|
|
|
|
|
|
|
|
|
|
# ums init 选项
|
|
|
|
|
|
ums init --db-type sqlite # 数据库类型
|
|
|
|
|
|
ums init --db-path ./data/ums.db # 数据库路径
|
|
|
|
|
|
ums init --redis-enable # 启用 Redis
|
|
|
|
|
|
ums init --redis-host localhost # Redis 地址
|
|
|
|
|
|
ums init --admin-user admin # 管理员用户名
|
|
|
|
|
|
ums init --admin-pass MyPassword123 # 管理员密码
|
|
|
|
|
|
ums init --admin-email admin@example.com # 管理员邮箱
|
|
|
|
|
|
ums init --port 8080 # 服务端口
|
|
|
|
|
|
ums init --cors-origin http://example.com # CORS 域名
|
|
|
|
|
|
ums init --yes # 跳过确认
|
|
|
|
|
|
```
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-19 08:59:00 +08:00
|
|
|
|
## 配置文件
|
|
|
|
|
|
|
|
|
|
|
|
初始化后生成以下配置文件:
|
|
|
|
|
|
|
|
|
|
|
|
**config.yaml** - 主配置文件
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
server:
|
|
|
|
|
|
port: 8080
|
|
|
|
|
|
mode: release
|
|
|
|
|
|
database:
|
|
|
|
|
|
type: sqlite
|
|
|
|
|
|
dbname: "./data/user_management.db"
|
|
|
|
|
|
jwt:
|
|
|
|
|
|
secret: "<自动生成的密钥>"
|
|
|
|
|
|
redis:
|
|
|
|
|
|
enabled: false
|
2026-04-09 15:30:26 +08:00
|
|
|
|
```
|
2026-04-19 08:59:00 +08:00
|
|
|
|
|
|
|
|
|
|
**.env** - 环境变量(包含敏感信息,请勿提交)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
JWT_SECRET=<自动生成的密钥>
|
|
|
|
|
|
BOOTSTRAP_SECRET=<自动生成的密钥>
|
|
|
|
|
|
DEFAULT_ADMIN_EMAIL=admin@example.com
|
|
|
|
|
|
DEFAULT_ADMIN_PASSWORD=<您设置的密码>
|
2026-04-09 15:30:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 开发命令
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-04-19 08:59:00 +08:00
|
|
|
|
# 构建 CLI
|
|
|
|
|
|
make build-cli
|
|
|
|
|
|
|
|
|
|
|
|
# 构建所有平台 CLI
|
|
|
|
|
|
make build-cli-all
|
|
|
|
|
|
|
|
|
|
|
|
# 构建服务器
|
2026-04-09 15:30:26 +08:00
|
|
|
|
go build ./cmd/server
|
|
|
|
|
|
|
2026-05-28 15:55:40 +08:00
|
|
|
|
# 后端最低验证矩阵
|
|
|
|
|
|
go vet ./...
|
|
|
|
|
|
go test ./... -count=1
|
|
|
|
|
|
|
|
|
|
|
|
# 前端最低验证矩阵(显式移除 NODE_ENV=production 干扰)
|
|
|
|
|
|
cd frontend/admin && env -u NODE_ENV npm run lint
|
|
|
|
|
|
cd frontend/admin && env -u NODE_ENV npm run build
|
|
|
|
|
|
cd frontend/admin && env -u NODE_ENV npm run test:run
|
2026-04-09 15:30:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 部署
|
|
|
|
|
|
|
|
|
|
|
|
- 开发部署:`docs/DEPLOYMENT.md`
|
|
|
|
|
|
- 生产部署:`DEPLOY_GUIDE.md`
|
|
|
|
|
|
- 运行手册:`docs/guides/` 目录下的 7 个 Runbook
|
|
|
|
|
|
|
2026-05-29 14:00:21 +08:00
|
|
|
|
## 测试状态(2026-05-29 live snapshot)
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-04-18 21:30:14 +08:00
|
|
|
|
| 测试类型 | 状态 |
|
|
|
|
|
|
|----------|------|
|
|
|
|
|
|
| Go 构建 | ✅ 通过 |
|
|
|
|
|
|
| Go vet | ✅ 通过 |
|
2026-05-28 15:55:40 +08:00
|
|
|
|
| Go 测试 | ✅ 通过(`go test ./... -count=1`) |
|
2026-04-18 21:30:14 +08:00
|
|
|
|
| 前端 lint | ✅ 通过 |
|
2026-05-28 15:55:40 +08:00
|
|
|
|
| 前端构建 | ✅ 通过 |
|
|
|
|
|
|
| 前端测试 | ✅ 通过(82 files / 522 tests) |
|
|
|
|
|
|
| 依赖审计 | ✅ 通过(prod/dev 均 0 漏洞) |
|
|
|
|
|
|
| 浏览器级 E2E | ✅ 通过(Playwright CDP full-chain) |
|
2026-04-18 21:30:14 +08:00
|
|
|
|
|
|
|
|
|
|
## 项目状态
|
|
|
|
|
|
|
|
|
|
|
|
完整项目状态:`docs/status/REAL_PROJECT_STATUS.md`
|
2026-04-09 15:30:26 +08:00
|
|
|
|
|
2026-05-29 14:00:21 +08:00
|
|
|
|
**2026-05-29 最新状态:**
|
2026-05-28 15:55:40 +08:00
|
|
|
|
- 后端 build / vet / full test matrix 全绿
|
|
|
|
|
|
- 前端 lint / build / unit test 全绿
|
|
|
|
|
|
- 前端 dev toolchain 审计收敛为 0 漏洞
|
|
|
|
|
|
- 浏览器级真实 E2E 已闭环
|
2026-05-29 14:00:21 +08:00
|
|
|
|
- 全部 P0/P1 review blocker 已修复
|
|
|
|
|
|
- 当前项目评级:B / 有条件就绪
|
2026-05-28 15:55:40 +08:00
|
|
|
|
|
|
|
|
|
|
**边界说明:** 当前可以诚实宣称的是“本地可审计的后端/前端验证与浏览器级真实 E2E 已闭环”;不应夸大为“所有生产外部集成和完整上线材料都已全部闭环”。
|