# 账号管理接口迁移指南 ## 概述 本次重构统一了账号管理和认证接口架构,简化了路由结构,前端需要更新所有相关接口调用。 ## Breaking Changes ### 1. 账号管理接口路由变更 所有账号管理接口统一为 `/api/admin/accounts/*` 结构,**不再按账号类型区分路由**: | 旧路由前缀 | 新路由前缀 | 说明 | |-----------|-----------|------| | `/api/admin/platform-accounts` | `/api/admin/accounts` | 平台账号 | | `/api/admin/shop-accounts` | `/api/admin/accounts` | 代理账号 | | `/api/admin/customer-accounts` | `/api/admin/accounts` | 企业账号(改名) | **重要变更**: - ✅ 所有账号类型共享同一套路由 - ✅ 账号类型通过**请求体的 `user_type` 字段**区分(2=平台,3=代理,4=企业) - ✅ `customer-accounts` 改名为 `enterprise`(命名更准确) #### 完整路由映射(10个接口) | 功能 | HTTP 方法 | 旧路径示例(平台账号) | 新路径(统一) | |------|-----------|---------------------|-------------| | 创建账号 | POST | `/api/admin/platform-accounts` | `/api/admin/accounts` | | 查询列表 | GET | `/api/admin/platform-accounts` | `/api/admin/accounts` | | 获取详情 | GET | `/api/admin/platform-accounts/:id` | `/api/admin/accounts/:id` | | 更新账号 | PUT | `/api/admin/platform-accounts/:id` | `/api/admin/accounts/:id` | | 删除账号 | DELETE | `/api/admin/platform-accounts/:id` | `/api/admin/accounts/:id` | | 修改密码 | PUT | `/api/admin/platform-accounts/:id/password` | `/api/admin/accounts/:id/password` | | 修改状态 | PUT | `/api/admin/platform-accounts/:id/status` | `/api/admin/accounts/:id/status` | | 分配角色 | POST | `/api/admin/platform-accounts/:id/roles` | `/api/admin/accounts/:id/roles` | | 获取角色 | GET | `/api/admin/platform-accounts/:id/roles` | `/api/admin/accounts/:id/roles` | | 移除角色 | DELETE | `/api/admin/platform-accounts/:id/roles/:role_id` | `/api/admin/accounts/:account_id/roles/:role_id` | **⚠️ 特别注意**:移除角色接口的路径参数从 `:id` 改为 `:account_id` ### 2. 认证接口路由变更 后台和 H5 认证接口合并为统一的 `/api/auth/*`: | 功能 | 后台旧路由 | H5 旧路由 | 新路由(统一) | |------|-----------|----------|-------------| | 登录 | `/api/admin/login` | `/api/h5/login` | `/api/auth/login` | | 登出 | `/api/admin/logout` | `/api/h5/logout` | `/api/auth/logout` | | 刷新Token | `/api/admin/refresh-token` | `/api/h5/refresh-token` | `/api/auth/refresh-token` | | 获取用户信息 | `/api/admin/me` | `/api/h5/me` | `/api/auth/me` | | 修改密码 | `/api/admin/password` | `/api/h5/password` | `/api/auth/password` | **个人客户认证不受影响**:`/api/c/v1/*` 保持不变 ## 数据结构变更 ### 请求体变更:账号类型通过 user_type 字段区分 创建账号时,必须在请求体中指定 `user_type`: ```json { "username": "test_user", "phone": "13800000001", "password": "Password123", "user_type": 2, // 必填:2=平台用户,3=代理账号,4=企业账号 "shop_id": 10, // 代理账号必填 "enterprise_id": 5 // 企业账号必填 } ``` 查询账号列表时,可通过 `user_type` 参数筛选: ``` GET /api/admin/accounts?user_type=3 // 查询代理账号 GET /api/admin/accounts // 查询所有账号 ``` ### 响应体无变化 所有接口的响应体结构保持不变。 ## 迁移步骤 ### 第一步:批量替换路由 使用编辑器全局搜索替换: ``` # 账号管理路由(所有账号类型统一) /api/admin/platform-accounts → /api/admin/accounts /api/admin/shop-accounts → /api/admin/accounts /api/admin/customer-accounts → /api/admin/accounts # 认证路由(后台) /api/admin/login → /api/auth/login /api/admin/logout → /api/auth/logout /api/admin/refresh-token → /api/auth/refresh-token /api/admin/me → /api/auth/me /api/admin/password → /api/auth/password # 认证路由(H5) /api/h5/login → /api/auth/login /api/h5/logout → /api/auth/logout /api/h5/refresh-token → /api/auth/refresh-token /api/h5/me → /api/auth/me /api/h5/password → /api/auth/password ``` ### 第二步:更新账号创建逻辑 **旧代码**(根据路由区分账号类型): ```javascript // ❌ 错误:通过不同路由创建不同类型账号 const createPlatformAccount = (data) => axios.post('/api/admin/platform-accounts', data); const createShopAccount = (data) => axios.post('/api/admin/shop-accounts', data); const createEnterpriseAccount = (data) => axios.post('/api/admin/customer-accounts', data); ``` **新代码**(通过 user_type 区分账号类型): ```javascript // ✅ 正确:统一路由,通过 user_type 区分 const createAccount = (data) => axios.post('/api/admin/accounts', { ...data, user_type: data.user_type, // 2=平台, 3=代理, 4=企业 }); // 使用示例 createAccount({ username: 'test', user_type: 2, ...otherData }); // 创建平台账号 createAccount({ username: 'agent1', user_type: 3, shop_id: 10, ...otherData }); // 创建代理账号 createAccount({ username: 'ent1', user_type: 4, enterprise_id: 5, ...otherData }); // 创建企业账号 ``` ### 第三步:更新账号查询逻辑 **旧代码**(分别查询不同类型账号): ```javascript // ❌ 错误:三个不同的查询接口 const getPlatformAccounts = (params) => axios.get('/api/admin/platform-accounts', { params }); const getShopAccounts = (params) => axios.get('/api/admin/shop-accounts', { params }); const getEnterpriseAccounts = (params) => axios.get('/api/admin/customer-accounts', { params }); ``` **新代码**(统一查询,可选筛选): ```javascript // ✅ 正确:统一查询接口,通过 user_type 筛选 const getAccounts = (params) => axios.get('/api/admin/accounts', { params }); // 使用示例 getAccounts({ user_type: 2 }); // 查询平台账号 getAccounts({ user_type: 3 }); // 查询代理账号 getAccounts({ user_type: 4 }); // 查询企业账号 getAccounts({}); // 查询所有账号 ``` ### 第四步:更新类型定义(如果使用 TypeScript) ```typescript // 旧类型 type AccountType = 'platform' | 'shop' | 'customer'; // 新类型 type AccountType = 'platform' | 'shop' | 'enterprise'; // customer 改名为 enterprise // 新增:账号类型值枚举 enum UserType { Platform = 2, // 平台用户 Agent = 3, // 代理账号 Enterprise = 4, // 企业账号 } ``` ### 第五步:测试验证 1. **后台系统**: - 登录/登出功能 - 平台账号 CRUD - 代理账号 CRUD - 企业账号 CRUD - 角色管理功能 2. **H5 系统**: - 登录/登出功能 - 代理账号自助操作 - 企业账号自助操作 3. **个人客户端**: - 确认认证接口不受影响 ## 快速迁移示例 ### Vue/React 项目 ```javascript // 旧配置 const API = { platformAccounts: '/api/admin/platform-accounts', shopAccounts: '/api/admin/shop-accounts', customerAccounts: '/api/admin/customer-accounts', adminLogin: '/api/admin/login', h5Login: '/api/h5/login', } // 新配置 const API = { accounts: '/api/admin/accounts', // 统一账号管理接口 login: '/api/auth/login', // 统一认证接口 logout: '/api/auth/logout', refreshToken: '/api/auth/refresh-token', me: '/api/auth/me', updatePassword: '/api/auth/password', } // 使用示例 const accountAPI = { // 创建账号(根据 user_type 区分类型) create: (data) => axios.post(API.accounts, data), // 查询账号列表(可选筛选 user_type) list: (params) => axios.get(API.accounts, { params }), // 获取详情 get: (id) => axios.get(`${API.accounts}/${id}`), // 更新账号 update: (id, data) => axios.put(`${API.accounts}/${id}`, data), // 删除账号 delete: (id) => axios.delete(`${API.accounts}/${id}`), // 其他操作... }; ``` ## 常见问题 ### Q1:为什么要做这次重构? **A**:解决以下问题: 1. 接口重复(三种账号类型有三套完全相同的接口) 2. 路由冗余(Handler 逻辑完全一样,却有三套路由) 3. 维护成本高(新增功能需要改三处) 4. 命名混乱(`customer-accounts` 实际管理企业账号) 5. **安全漏洞**(缺少越权检查,代理可以为其他店铺创建账号) ### Q2:是否支持向后兼容? **A**:**不支持**。这是 Breaking Change,旧接口已完全删除,前端必须同步更新。 ### Q3:迁移需要多长时间? **A**: - 简单项目:2-4 小时(主要是查找替换 + 测试) - 复杂项目:1-2 天(需要重构业务逻辑 + 测试回归) ### Q4:后台和 H5 登录接口合并后如何区分? **A**:不需要区分。后端通过用户类型自动判断: - 超级管理员、平台用户:只能后台登录 - 代理用户:可以后台和 H5 登录 - 企业用户:只能 H5 登录 ### Q5:企业账号有什么特殊限制? **A**:企业账号**禁止访问账号管理接口**(路由层直接拦截),尝试访问会返回 403 错误。 ### Q6:新增了哪些安全功能? **A**: 1. **三层越权防护**:路由层拦截 + Service 层权限检查 + GORM 自动过滤 2. **操作审计日志**:所有账号操作(创建、更新、删除、角色分配)都被记录 3. **统一错误返回**:越权访问返回"无权限操作该资源或资源不存在",防止信息泄露 ### Q7:如何区分不同账号类型? **A**:通过 `user_type` 字段区分: - `user_type: 2` - 平台用户 - `user_type: 3` - 代理账号(需提供 `shop_id`) - `user_type: 4` - 企业账号(需提供 `enterprise_id`) ## 新增功能 ### 1. 企业账号完整功能 企业账号现在支持所有操作(之前只有部分功能): - ✅ CRUD 操作 - ✅ 角色管理 - ✅ 密码管理 - ✅ 状态管理 ### 2. 代理账号完整功能 代理账号现在支持所有操作(之前缺少角色管理): - ✅ CRUD 操作 - ✅ **角色管理**(新增) - ✅ 密码管理 - ✅ 状态管理 ### 3. 统一路由结构 所有账号类型共享同一套接口,简化了前端开发: - ✅ 减少重复代码 - ✅ 统一接口调用方式 - ✅ 更容易扩展新功能 ## 支持 如有问题请联系后端团队或查看以下文档: - [功能总结](./功能总结.md) - [API 文档](./API文档.md) - [OpenAPI 规范](../../docs/admin-openapi.yaml)