- 新增平台账号列表查询接口(自动筛选超级管理员和平台用户) - 新增密码修改和状态切换专用接口 - 增强角色分配功能,支持空数组清空所有角色 - 新增超级管理员保护机制,禁止分配角色 - 新增完整的集成测试和OpenSpec规范文档
4.8 KiB
4.8 KiB
Change: 实现平台账号管理接口
Why
当前系统已有通用的账号管理功能,但缺少针对**平台账号(平台用户 + 超级管理员)**的专用管理接口。业务需要:
- 专门的平台账号列表:筛选出
user_type IN (1, 2)的账号,包含超级管理员 - 语义明确的专用接口:密码修改、启用/禁用需要独立端点,而非通过通用 Update 接口
- 角色分配灵活性:允许清空角色、支持可选角色分配
- 超级管理员保护:超级管理员在列表中只读显示,禁止编辑角色
现状:
- ✅ 已有账号 CRUD 功能(
/internal/handler/admin/account.go) - ✅ 已有角色分配功能(
AssignRoles,GetRoles,RemoveRole) - ❌ 缺少专门的密码修改接口(当前混在 Update 接口中)
- ❌ 缺少专门的启用/禁用接口(当前混在 Update 接口中)
- ❌ 角色分配要求至少 1 个角色(不允许清空)
- ❌ 没有超级管理员编辑保护
What Changes
1. 新增专用接口
Handler 层新增方法
UpdatePassword(c *fiber.Ctx)- 修改密码专用接口UpdateStatus(c *fiber.Ctx)- 启用/禁用专用接口ListPlatformAccounts(c *fiber.Ctx)- 平台账号列表查询(user_type IN (1,2))
Service 层新增方法
UpdatePassword(ctx, accountID, newPassword)- 密码修改业务逻辑UpdateStatus(ctx, accountID, status)- 状态切换业务逻辑ListPlatformAccounts(ctx, req)- 平台账号列表查询(自动筛选 user_type)
新增 DTO
UpdatePasswordRequest- 密码修改请求(只包含new_password)UpdateStatusRequest- 状态修改请求(只包含status)PlatformAccountListRequest- 平台账号列表请求(移除 user_type 筛选)
2. 优化现有角色分配逻辑
Service 层修改
AssignRoles方法增强:- 允许
roleIDs为空数组(清空所有角色) - 超级管理员(
user_type=1)禁止分配角色,返回错误 - 平台用户(
user_type=2)可分配无限个平台角色(role_type=1)
- 允许
DTO 修改
AssignRolesRequest.RoleIDs改为可选(validate:"omitempty")
3. 新增路由
// 平台账号专用路由
GET /api/admin/platform-accounts // 平台账号列表(含超级管理员)
POST /api/admin/platform-accounts // 新增平台账号
GET /api/admin/platform-accounts/:id // 获取详情
PUT /api/admin/platform-accounts/:id // 编辑平台账号
DELETE /api/admin/platform-accounts/:id // 删除平台账号
// 专用操作接口
PUT /api/admin/platform-accounts/:id/password // 修改密码
PUT /api/admin/platform-accounts/:id/status // 启用/禁用
// 角色管理
POST /api/admin/platform-accounts/:id/roles // 分配角色(支持空数组)
GET /api/admin/platform-accounts/:id/roles // 获取角色列表
DELETE /api/admin/platform-accounts/:id/roles/:role_id // 移除单个角色
4. 响应格式调整
列表返回字段(符合需求):
{
"items": [
{
"id": 1,
"username": "admin",
"phone": "13800000000",
"created_at": "2025-01-14T10:30:00Z",
"status": 1,
"user_type": 1
}
],
"total": 10,
"page": 1,
"size": 20
}
Impact
受影响的 Specs
role-permission- 角色分配逻辑调整(允许空数组)user-organization- 平台账号管理增强
受影响的代码模块
internal/handler/admin/account.go- 新增 3 个 Handler 方法internal/service/account/service.go- 新增 2 个 Service 方法,修改 AssignRolesinternal/model/account_dto.go- 新增 2 个 DTO,修改 AssignRolesRequestinternal/routes/account.go- 新增路由注册
Breaking Changes
无。新增功能向后兼容,现有接口保持不变。
数据库变更
无。复用现有 tb_account 表结构。
迁移计划
无需迁移。新接口与现有接口共存,前端可按需切换。
Risks
-
角色分配空数组行为:允许清空所有角色可能导致账号无权限
- 缓解措施:前端二次确认,文档明确说明
-
超级管理员保护:禁止编辑超级管理员角色可能影响已有流程
- 缓解措施:仅对
user_type=1生效,平台用户不受影响
- 缓解措施:仅对
-
路由命名冲突:新增
/platform-accounts路由可能与未来规划冲突- 缓解措施:遵循 RESTful 规范,路径清晰语义化
Open Questions
- ✅ 已确认:超级管理员是否需要出现在平台账号列表? → 是
- ✅ 已确认:修改密码是否需要旧密码验证? → 否(管理员重置场景)
- ✅ 已确认:角色分配是否必填? → 可选(允许无角色账号)
- ✅ 已确认:是否允许清空所有角色? → 是(灵活分配)