feat: 实现企业设备授权功能并归档 OpenSpec 变更
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m39s

- 新增企业设备授权模块(Model、DTO、Service、Handler、Store)
- 实现设备授权的创建、查询、更新、删除等完整业务逻辑
- 添加企业卡授权与设备授权的关联关系
- 新增 2 个数据库迁移脚本
- 同步 OpenSpec delta specs 到 main specs
- 归档 add-enterprise-device-authorization 变更
- 更新 API 文档和路由配置
- 新增完整的集成测试和单元测试覆盖
This commit is contained in:
2026-01-29 13:18:49 +08:00
parent e87513541b
commit b02175271a
118 changed files with 14306 additions and 472 deletions

View File

@@ -0,0 +1,67 @@
# 规格:角色请求验证
## 新增需求
### 需求Create 方法验证必填字段
RoleHandler.Create 方法必须验证 CreateRoleRequest 的所有必填字段。
#### 场景:缺少 role_name 返回验证错误
- **WHEN** 客户端发送 POST /api/admin/roles 请求body 缺少 role_name 字段
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
- **AND** 错误消息提示 "参数验证失败"
#### 场景:缺少 role_type 返回验证错误
- **WHEN** 客户端发送 POST /api/admin/roles 请求body 缺少 role_type 字段
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
#### 场景role_name 过长返回验证错误
- **WHEN** 客户端发送 POST /api/admin/roles 请求role_name 超过 50 个字符
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
### 需求Update 方法验证字段格式
RoleHandler.Update 方法必须验证 UpdateRoleRequest 的字段格式。
#### 场景role_name 过长返回验证错误
- **WHEN** 客户端发送 PUT /api/admin/roles/:id 请求role_name 超过 50 个字符
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
#### 场景status 值非法返回验证错误
- **WHEN** 客户端发送 PUT /api/admin/roles/:id 请求status 值不是 0 或 1
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
### 需求AssignPermissions 方法验证权限ID列表
RoleHandler.AssignPermissions 方法必须验证权限ID列表不为空。
#### 场景perm_ids 为空数组返回验证错误
- **WHEN** 客户端发送 POST /api/admin/roles/:id/permissions 请求perm_ids 为空数组 []
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
### 需求UpdateStatus 方法验证状态值
RoleHandler.UpdateStatus 方法必须验证状态值在有效范围内。
#### 场景status 值非法返回验证错误
- **WHEN** 客户端发送 PUT /api/admin/roles/:id/status 请求status 值不是 0 或 1
- **THEN** 返回 HTTP 400
- **AND** 响应包含错误码CodeInvalidParam
## 测试要求
- 取消 tests/integration/role_test.go 中的 TODO 跳过(第 51 行)
- 验证测试能够通过,证明验证逻辑正常工作