All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m17s
- 合并 customer_account 和 shop_account 路由到统一的 account 接口 - 新增统一认证接口 (auth handler) - 实现越权防护中间件和权限检查工具函数 - 新增操作审计日志模型和服务 - 更新数据库迁移 (版本 39: account_operation_log 表) - 补充集成测试覆盖权限检查和审计日志场景
5.1 KiB
5.1 KiB
统一账号管理接口重构
Why
当前账号管理接口存在严重的架构混乱和安全漏洞:
- 接口重复:
/accounts和/platform-accounts使用同一个 Handler,功能完全重复(20个重复接口) - 功能不一致:平台账号有完整的 CRUD + 角色管理,而代理/企业账号缺少关键功能
- 命名混乱:
/customer-accounts实际管理的是企业账号,代码注释错误 - 安全漏洞:Create 操作缺少越权检查,代理可以为其他店铺创建账号
- 可维护性差:三个独立的 Service(Account、ShopAccount、CustomerAccount)导致代码重复和不一致
这次重构将统一接口架构,消除重复,加固安全防护,并添加完整的操作审计,为后续功能扩展打下坚实基础。
What Changes
- BREAKING: 删除旧路由
- 删除
/api/admin/platform-accounts/*(10个接口) - 删除
/api/admin/shop-accounts/*(5个接口) - 删除
/api/admin/customer-accounts/*(5个接口)
- 删除
- 新增: 统一账号管理路由
/api/admin/accounts/platform/*(平台账号管理)/api/admin/accounts/shop/*(代理账号管理)/api/admin/accounts/enterprise/*(企业账号管理)
- BREAKING: 认证接口统一
- 删除
/api/admin/login、/api/admin/logout等(5个接口) - 删除
/api/h5/login、/api/h5/logout等(5个接口) - 新增
/api/auth/*统一认证(5个接口) - 保留
/api/c/v1/*个人客户认证(独立业务逻辑)
- 删除
- 新增: 三层越权防护机制
- 路由层:企业账号中间件拦截
- Service 层:CanManageShop/CanManageEnterprise 权限检查
- GORM 层:已有自动过滤(保持)
- 新增: 操作审计系统
- 数据库迁移:创建
tb_account_operation_log表 - Service:AccountAuditService 记录所有账号操作
- 集成:Create/Update/Delete/AssignRoles 自动记录
- 数据库迁移:创建
- 重构: 合并 Service 层
- 删除 ShopAccountService、CustomerAccountService
- 扩展 AccountService 支持所有账号类型
- 统一错误返回:"无权限操作该资源或资源不存在"
- 重构: 合并 Handler 层
- 删除 ShopAccountHandler、CustomerAccountHandler
- 扩展 AccountHandler 支持所有账号类型
- 新增: 权限辅助函数
pkg/middleware/permission_helper.go- CanManageShop:验证代理对目标店铺的管理权限
- CanManageEnterprise:验证代理对目标企业的管理权限
Capabilities
New Capabilities
account-permission-check:账号管理权限检查机制(三层防护)account-operation-audit:账号操作审计日志系统unified-auth-api:统一认证接口(后台+H5)
Modified Capabilities
account-management:账号管理接口架构(统一路由结构,消除重复)
Impact
代码变更:
- 删除文件:
internal/handler/admin/shop_account.gointernal/handler/admin/customer_account.gointernal/service/shop_account/service.gointernal/service/customer_account/service.gointernal/routes/shop.go(部分)internal/routes/customer_account.go
- 修改文件:
internal/handler/admin/account.go(扩展支持所有账号类型)internal/service/account/service.go(添加权限检查和审计)internal/routes/account.go(新路由结构)internal/routes/admin.go(更新路由注册)
- 新增文件:
pkg/middleware/permission_helper.go(权限检查函数)internal/model/account_operation_log.go(审计日志模型)internal/store/postgres/account_operation_log_store.go(审计日志存储)internal/service/account_audit/service.go(审计日志服务)migrations/XXXXXX_create_account_operation_log.up.sql(数据库迁移)
API 变更(Breaking Changes):
- 前端需要更新所有账号管理接口调用
- 新旧路由映射:
旧:POST /api/admin/platform-accounts 新:POST /api/admin/accounts/platform 旧:GET /api/admin/shop-accounts 新:GET /api/admin/accounts/shop 旧:POST /api/admin/customer-accounts 新:POST /api/admin/accounts/enterprise 旧:POST /api/admin/login 新:POST /api/auth/login
测试变更:
- 删除:
tests/integration/platform_account_test.go(已有 account_test.go) - 删除:
tests/integration/shop_account_management_test.go - 删除:
tests/unit/customer_account_service_test.go - 修改:
tests/integration/account_test.go(扩展覆盖所有账号类型) - 新增:
tests/integration/account_permission_test.go(越权防护测试) - 新增:
tests/integration/account_audit_test.go(审计日志测试)
依赖影响:
- 无新增外部依赖
- 内部依赖调整:AccountService 新增 ShopStore 和 EnterpriseStore 依赖
性能影响:
- 权限检查:增加 GetSubordinateShopIDs 调用(已有 Redis 缓存,影响 < 5ms)
- 审计日志:异步写入,不阻塞主流程
- 预期 API 响应时间增加 < 10ms
安全提升:
- 修复 Create 操作越权漏洞(Critical)
- 统一错误返回,防止信息泄露
- 完整操作审计,满足合规要求