feat: add auth provider boundary
This commit is contained in:
+15
-10
@@ -13,7 +13,7 @@ main.go
|
||||
├─ HotkeyService
|
||||
├─ SystemInfo
|
||||
├─ OCRService # 当前存量示例
|
||||
├─ AuthService # 目标模块
|
||||
├─ AuthService # 已实现 provider 边界
|
||||
├─ AuditLogService # 目标模块
|
||||
├─ AppLogService # 目标模块
|
||||
├─ ImageOptimizationService # 目标业务样例
|
||||
@@ -42,9 +42,12 @@ frontend/src
|
||||
- `internal/services/ocr_service.go`:当前 OCR 存量示例,后续可演进为图片 AI 能力的一部分。
|
||||
- `platform/`:隔离 Windows / macOS 热键和系统能力差异。
|
||||
|
||||
已实现边界:
|
||||
|
||||
- `AuthService`:登录、退出、会话读取;内部通过 `AuthProvider` 接入本地固定账号或真实后端。当前 `LocalAuthProvider` 可用,`RemoteAuthProvider` 保留边界并返回未配置错误。
|
||||
|
||||
目标新增边界:
|
||||
|
||||
- `AuthService`:登录、退出、会话读取;内部通过 `AuthProvider` 接入本地固定账号或真实后端。
|
||||
- `AuditLogService`:记录和查询用户操作审计日志。
|
||||
- `AppLogService`:记录和查询运行错误,必要时可落本地滚动日志文件。
|
||||
- `ImageOptimizationService`:商品图片 AI 优化任务的创建、状态、结果和失败原因。
|
||||
@@ -69,7 +72,7 @@ frontend/src
|
||||
|
||||
## 登录架构
|
||||
|
||||
登录必须通过 provider 边界实现:
|
||||
登录已经通过 provider 边界实现:
|
||||
|
||||
```text
|
||||
AuthService
|
||||
@@ -79,8 +82,10 @@ AuthService
|
||||
```
|
||||
|
||||
- `LocalAuthProvider`:用于模板演示和离线模式,固定账号密码由后端配置或安全哈希保存,不写死在前端。
|
||||
- `RemoteAuthProvider`:用于真实后端,负责请求登录接口并保存 token / session。
|
||||
- `RemoteAuthProvider`:用于真实后端,负责请求登录接口并保存 token / session;当前只保留接口边界并返回未配置错误。
|
||||
- 前端只关心登录、退出和当前会话,不关心 provider 细节。
|
||||
- 默认本地账号由 `appconfig` 初始化,用户名为 `admin`,默认密码为 `admin123`,密码以 salt + SHA-256 hash 形式保存。
|
||||
- 登录成功、失败和退出会写入 `audit_logs`。
|
||||
|
||||
## 日志架构
|
||||
|
||||
@@ -118,8 +123,6 @@ appconfig(
|
||||
)
|
||||
```
|
||||
|
||||
目标新增表:
|
||||
|
||||
```sql
|
||||
auth_sessions(
|
||||
id INTEGER PRIMARY KEY,
|
||||
@@ -127,8 +130,8 @@ auth_sessions(
|
||||
username TEXT,
|
||||
provider TEXT,
|
||||
token TEXT,
|
||||
created_at DATETIME,
|
||||
expires_at DATETIME,
|
||||
created_at TEXT,
|
||||
expires_at TEXT,
|
||||
active INTEGER
|
||||
)
|
||||
```
|
||||
@@ -141,10 +144,12 @@ audit_logs(
|
||||
target_type TEXT,
|
||||
target_id TEXT,
|
||||
detail TEXT,
|
||||
created_at DATETIME
|
||||
created_at TEXT
|
||||
)
|
||||
```
|
||||
|
||||
目标新增表:
|
||||
|
||||
```sql
|
||||
app_logs(
|
||||
id INTEGER PRIMARY KEY,
|
||||
@@ -208,7 +213,7 @@ image_task_results(
|
||||
- 第二窗口保持当前小窗定位,不参与最大化、尺寸恢复和主布局填充逻辑。
|
||||
- 后续增强再保存主窗口尺寸和最大化状态,下次启动恢复用户选择。
|
||||
|
||||
实现状态:主窗口初始尺寸、居中、可调整大小、根容器和主布局填充已落地;主应用路由骨架已落地。窗口尺寸持久化依赖设置 schema 后续实现。
|
||||
实现状态:主窗口初始尺寸、居中、可调整大小、根容器和主布局填充已落地;主应用路由骨架已落地;登录 provider 边界已落地。窗口尺寸持久化依赖设置 schema 后续实现。
|
||||
|
||||
## 关键风险
|
||||
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@
|
||||
| T-010 | 确定 Windows-first 窗口与布局策略 | T-002 | 主窗口默认不最大化,初始 `1280x800`,最小 `1024x720`,居中,可调整大小;页面根容器 `width: 100%`、`height: 100vh`;内部用 flex/grid 填满窗口;第二窗口保持小窗 | DONE |
|
||||
| T-011 | 实现主窗口启动参数与根布局策略 | T-010 | Go 侧设置主窗口初始宽高、居中、可调整大小;前端根容器和主布局填满窗口;阅读型内容有最大宽度,列表/仪表盘/设置页可自适应拉伸 | DONE |
|
||||
| T-012 | 搭建主应用路由骨架 | T-011 | `login`、`dashboard`、`image-optimizer`、`logs`、`statistics`、`settings`、`components` 路由可访问 | DONE |
|
||||
| T-013 | 实现登录 provider 边界 | T-012 | 支持本地固定账号 provider;预留 remote provider;账号密码不写死在前端;登录事件写审计日志 | TODO |
|
||||
| T-013 | 实现登录 provider 边界 | T-012 | 支持本地固定账号 provider;预留 remote provider;账号密码不写死在前端;登录事件写审计日志 | DONE |
|
||||
| T-014 | 收敛设置模块 schema | T-012 | 主题、语言、窗口行为、快捷键、数据目录、日志策略都有统一配置定义和默认值 | TODO |
|
||||
| T-015 | 持久化窗口尺寸和最大化状态 | T-014 | 保存主窗口尺寸和最大化状态;下次启动恢复用户上次选择;第二窗口不参与该逻辑 | TODO |
|
||||
|
||||
|
||||
+11
-8
@@ -61,24 +61,27 @@
|
||||
- 失败时返回错误给前端。
|
||||
- 平台依赖或能力缺失时,不应导致主窗口不可启动。
|
||||
|
||||
## 目标新增服务
|
||||
|
||||
### AuthService
|
||||
|
||||
目标方法:
|
||||
文件:`internal/services/auth_service.go`
|
||||
|
||||
- `Login(username string, password string) (Session, error)`:登录并返回会话。
|
||||
- `Logout() error`:退出当前会话。
|
||||
- `GetCurrentSession() (Session, error)`:读取当前会话。
|
||||
- `GetAuthProviders() []models.AuthProviderOption`:返回可用 provider 列表。
|
||||
- `GetAuthMode() string`:读取当前 auth provider。
|
||||
- `SetAuthMode(mode string) error`:切换 `local` 或 `remote` provider。
|
||||
- `Login(provider string, username string, password string) (models.AuthSession, error)`:登录并返回会话。
|
||||
- `Logout() error`:退出当前会话。
|
||||
- `GetCurrentSession() (models.AuthSession, error)`:读取当前有效会话;无会话时返回空 session。
|
||||
|
||||
约束:
|
||||
|
||||
- 前端不得写死固定账号密码。
|
||||
- `LocalAuthProvider` 只用于演示和离线模式。
|
||||
- `RemoteAuthProvider` 用于真实后端登录。
|
||||
- `LocalAuthProvider` 只用于演示和离线模式,默认账号来自后端初始化配置。
|
||||
- 默认本地演示账号:`admin` / `admin123`;密码在数据库中以 salt + SHA-256 hash 保存,不在前端页面或绑定中保存。
|
||||
- `RemoteAuthProvider` 用于真实后端登录,目前保留边界并返回未配置错误。
|
||||
- 登录成功、失败和退出必须写审计日志。
|
||||
|
||||
## 目标新增服务
|
||||
|
||||
### AuditLogService
|
||||
|
||||
目标方法:
|
||||
|
||||
+16
-4
@@ -6,7 +6,7 @@
|
||||
|
||||
项目处于可复用桌面应用模板的产品定位校准阶段。目标已经从迁移后的基础工程调整为“Windows-first、可扩展到其他平台的桌面端应用模板”。
|
||||
|
||||
当前代码已从迁移后的 Wails/Vue/SQLite 基线推进到主应用路由骨架阶段,已具备设置、多语言、主题、本地配置、热键、托盘、OCR 示例和模板级模块入口。登录、商品图片 AI 优化、审计日志、运行日志和数据统计仍是骨架页面,尚未接入真实后端服务和数据模型。
|
||||
当前代码已从迁移后的 Wails/Vue/SQLite 基线推进到主应用路由骨架和登录 provider 边界阶段,已具备设置、多语言、主题、本地配置、热键、托盘、OCR 示例、模板级模块入口和本地登录能力。商品图片 AI 优化、完整审计日志查询、运行日志和数据统计仍是骨架页面,尚未接入真实后端服务和业务数据模型。
|
||||
|
||||
## 已确认事实
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
- 主要运行场景:Windows 10 以及以后的 Windows 操作系统。
|
||||
- 跨平台策略:Windows-first,保留 macOS / Linux 适配边界,不在 MVP 承诺完整体验。
|
||||
- 第一批业务样例:电商商品图片 AI 优化。
|
||||
- 登录策略:本地固定账号 provider + 真实后端 provider 的可替换边界。
|
||||
- 登录策略:本地固定账号 provider 已实现,真实后端 provider 已预留边界。
|
||||
- 日志策略:审计日志用于用户动作追踪,运行日志用于系统排错。
|
||||
- 第一批统计指标:今日处理图片数、AI 优化成功率、平均处理耗时、失败任务数、今日操作日志数、最近 7 天处理趋势。
|
||||
- Go 模块名:`cmbone`
|
||||
@@ -24,6 +24,7 @@
|
||||
- 前端框架:Vue 3、Vite、TypeScript、Tailwind CSS、Ant Design Vue
|
||||
- 当前 Wails 前端 bindings:由 `wails3 build` / `wails3 generate bindings` 生成的 `.js` 文件。
|
||||
- 本地数据库:SQLite,用户配置目录下 `cmbone/cmbone.db`
|
||||
- 当前本地演示账号:`admin` / `admin123`,密码由后端初始化为 salt + SHA-256 hash,不写死在前端。
|
||||
- 当前主窗口路由:`/#/` 重定向到 `/#/dashboard`。
|
||||
- 当前主应用模块路由:`/#/login`、`/#/dashboard`、`/#/image-optimizer`、`/#/logs`、`/#/statistics`、`/#/settings`、`/#/components`。
|
||||
- 当前兼容重定向路由:`/#/business/image-optimizer`、`/#/logs/audit`、`/#/logs/app`。
|
||||
@@ -32,6 +33,8 @@
|
||||
- 已实现页面布局策略:根容器 `width: 100%`、`height: 100vh`,内部 flex/grid 填满窗口。
|
||||
- 已实现内容区策略:阅读型内容保留最大宽度;列表、仪表盘、设置页自适应拉伸。
|
||||
- 已保留第二窗口策略:保持小窗,不参与主窗口最大化和尺寸恢复逻辑。
|
||||
- 已实现 AuthService:`GetAuthProviders`、`GetAuthMode`、`SetAuthMode`、`Login`、`Logout`、`GetCurrentSession`。
|
||||
- 已实现登录审计留痕:登录成功、登录失败和退出写入 `audit_logs`。
|
||||
|
||||
## 当前命令
|
||||
|
||||
@@ -66,7 +69,7 @@ wails3 build
|
||||
|
||||
- 模板范围容易膨胀,必须按任务小步实现。
|
||||
- Wails v3 alpha 版本需要保持 CLI、Go 模块和前端 runtime 匹配。
|
||||
- 登录 provider、AI provider、日志和统计模块尚未实现,当前只是文档目标。
|
||||
- 真实后端登录 provider、AI provider、完整日志查询和统计模块尚未实现,当前仍是后续任务。
|
||||
- OCR 和热键依赖平台实现,跨平台修改需要分别验证。
|
||||
- 当前前端以构建检查为主,暂未引入专门的前端单元测试。
|
||||
- bindings 生成依赖本机安装的 `wails3`。
|
||||
@@ -124,9 +127,18 @@ wails3 build
|
||||
- `frontend/src/router/index.ts` 已切换为主应用模块路由,第二窗口继续保留 `/#/second`。
|
||||
- `npm run typecheck`、`npm run build`、`npm run build:dev`、`go test ./...`、`go build -o bin\cmbone.exe .`、`cmd /c build.bat` 和 `dev.bat` 烟测通过。
|
||||
|
||||
同日完成登录 provider 边界:
|
||||
|
||||
- 新增 `AuthService`、`LocalAuthProvider` 和 `RemoteAuthProvider`。
|
||||
- 新增 `auth_sessions` 和 `audit_logs` 迁移。
|
||||
- 登录页通过 Wails bindings 调用后端 AuthService,不在前端写固定账号密码。
|
||||
- 默认本地演示账号为 `admin` / `admin123`,密码以后端配置 hash 形式保存。
|
||||
- 登录成功、失败和退出会写审计日志。
|
||||
- `go test ./...`、`npm run typecheck`、`npm run build`、`npm run build:dev`、`go build -o bin\cmbone.exe .`、`cmd /c build.bat` 和 `dev.bat` 烟测通过。
|
||||
|
||||
## 下一步
|
||||
|
||||
从 [`06-tasks.md`](06-tasks.md) 领取第一个 `TODO` 任务。目前建议先做 `T-013`:实现登录 provider 边界。
|
||||
从 [`06-tasks.md`](06-tasks.md) 领取第一个 `TODO` 任务。目前建议先做 `T-014`:收敛设置模块 schema。
|
||||
|
||||
## 当前 blocker
|
||||
|
||||
|
||||
+12
-2
@@ -24,11 +24,21 @@
|
||||
| `internal/services/appconfig_service.go` | `GetAppConfig` / `SetAppConfig` | 前端配置读写入口 |
|
||||
| `internal/services/appconfig_service.go` | `GetLanguage` / `SetLanguage` | 语言配置读写入口 |
|
||||
|
||||
## 登录
|
||||
|
||||
| 文件 | 方法 / 内容 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `internal/services/auth_service.go` | `AuthService` | 登录、退出、当前会话和 auth mode |
|
||||
| `internal/services/auth_service.go` | `LocalAuthProvider` | 校验后端初始化的本地固定账号 |
|
||||
| `internal/services/auth_service.go` | `RemoteAuthProvider` | 真实后端登录 provider 预留边界 |
|
||||
| `internal/models/auth.go` | `AuthSession` / `AuthProviderOption` | 前端绑定模型 |
|
||||
| `frontend/src/modules/auth/LoginPage.vue` | 登录页 | 调用后端 AuthService,不写死账号密码 |
|
||||
|
||||
## 目标模板模块
|
||||
|
||||
| 模块 | 目标服务 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| 登录 | `AuthService` | 本地固定账号 provider 和真实后端 provider |
|
||||
| 登录 | `AuthService` | 已实现本地固定账号 provider,真实后端 provider 保留边界 |
|
||||
| 审计日志 | `AuditLogService` | 记录登录、设置变更、任务操作、导出等用户动作 |
|
||||
| 运行日志 | `AppLogService` | 记录 AI 调用、数据库、文件、热键等错误 |
|
||||
| 商品图片 AI 优化 | `ImageOptimizationService` | 创建任务、查询状态、查看结果和失败原因 |
|
||||
@@ -51,7 +61,7 @@
|
||||
| `frontend/src/router/index.ts` | routes | 登录、主应用模块和第二窗口路由 |
|
||||
| `frontend/src/layouts/MainLayout.vue` | 主窗口布局 | 侧边导航、顶部窗口区和 `RouterView` 内容区 |
|
||||
| `frontend/src/components/template/ModulePageShell.vue` | 模块页共享壳 | 模块标题、状态和摘要卡片 |
|
||||
| `frontend/src/modules/auth/LoginPage.vue` | 登录页骨架 | 后续接入 AuthProvider |
|
||||
| `frontend/src/modules/auth/LoginPage.vue` | 登录页 | 调用 AuthService 登录并处理错误 |
|
||||
| `frontend/src/modules/dashboard/DashboardPage.vue` | 工作台骨架 | P0 指标和近期任务入口 |
|
||||
| `frontend/src/modules/image-optimizer/ImageOptimizerPage.vue` | 主业务骨架 | 商品图片 AI 优化任务入口 |
|
||||
| `frontend/src/modules/logs/LogsPage.vue` | 日志页骨架 | 审计日志和运行日志入口 |
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@
|
||||
| 路由 | 组件 | 窗口 | 职责 |
|
||||
| --- | --- | --- | --- |
|
||||
| `#/` | `frontend/src/layouts/MainLayout.vue` | 主窗口 | 重定向到 `#/dashboard` |
|
||||
| `#/login` | `frontend/src/modules/auth/LoginPage.vue` | 主窗口 | 登录入口骨架,后续接入本地固定账号 provider 和真实后端 provider |
|
||||
| `#/login` | `frontend/src/modules/auth/LoginPage.vue` | 主窗口 | 登录入口,已接入本地固定账号 provider,真实后端 provider 保留边界 |
|
||||
| `#/dashboard` | `frontend/src/modules/dashboard/DashboardPage.vue` | 主窗口 | 工作台,展示 P0 指标和近期任务入口 |
|
||||
| `#/image-optimizer` | `frontend/src/modules/image-optimizer/ImageOptimizerPage.vue` | 主窗口 | 商品图片 AI 优化业务样例骨架 |
|
||||
| `#/logs` | `frontend/src/modules/logs/LogsPage.vue` | 主窗口 | 审计日志和运行日志统一入口骨架 |
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
| 路由 | 页面 | 职责 |
|
||||
| --- | --- | --- |
|
||||
| `#/login` | 登录页 | `T-013` 接入本地固定账号登录或真实后端登录 |
|
||||
| `#/login` | 登录页 | 已接入本地固定账号登录;真实后端登录待后续接入 |
|
||||
| `#/image-optimizer` | 商品图片 AI 优化 | `T-020` / `T-023` 接入任务模型、任务列表、状态、结果和失败原因 |
|
||||
| `#/logs` | 操作日志 | `T-021` 接入审计日志和运行日志查询 |
|
||||
| `#/statistics` | 数据统计 | `T-022` 接入趋势、成功率、耗时和失败任务 |
|
||||
|
||||
Reference in New Issue
Block a user