test-report.md 33 KB

权限管理系统 (perms-system-server) — 测试报告

报告日期: 2026-04-17 测试范围: API (go-zero REST, 全 POST) + gRPC (status codes) + Model 层 (_gen.go 模板生成 + 自定义方法) + Logic 单元测试 + util 层 + 访问控制 + UserDetailsLoader + 限流中间件 测试用例设计详见 test-design.md


一、测试执行总览

指标 数值
测试用例总数 (test-design.md) 554
已覆盖 TC 数 553
未实现 TC 数 1 (TC-0228 不可达防御分支 t.Skip)
测试函数总数 730
测试子用例总数 (含 table-driven) 812
测试包数量 23
✅ 通过 811 / 812
❌ 失败 0
⏭️ 跳过 1 (TC-0228 — 防御性不可达分支)

1.1 各包测试耗时

测试包 状态 耗时
handler/pub ✅ ok 0.766s
loaders ✅ ok 1.453s
logic/auth ✅ ok 5.574s
logic/dept ✅ ok 1.681s
logic/member ✅ ok 2.180s
logic/perm ✅ ok 2.644s
logic/product ✅ ok 3.901s
logic/pub ✅ ok 4.191s
logic/role ✅ ok 4.644s
logic/user ✅ ok 5.318s
middleware ✅ ok 4.475s
model/dept ✅ ok 4.981s
model/perm ✅ ok 5.673s
model/product ✅ ok 6.000s
model/productmember ✅ ok 6.445s
model/role ✅ ok 6.912s
model/roleperm ✅ ok 7.449s
model/user ✅ ok 7.785s
model/userperm ✅ ok 7.862s
model/userrole ✅ ok 7.230s
response ✅ ok 7.189s
server ✅ ok 7.491s
util ✅ ok 6.623s

二、TC 测试结果明细

2.1 REST API — 产品端登录 (TC-0001 ~ TC-0014)

TC编号 测试场景 测试结果
TC-0001 正常登录(普通用户+productCode) ✅ pass
TC-0002 正常登录-带productCode+ADMIN成员 ✅ pass
TC-0003 超管通过产品端登录被拒绝(403) ✅ pass
TC-0004 超管无productCode被拒绝(403) ✅ pass
TC-0005 用户不存在 ✅ pass
TC-0006 DB异常(非ErrNotFound) ✅ pass
TC-0007 密码错误 ✅ pass
TC-0008 账号冻结 ✅ pass
TC-0009 非产品成员 ✅ pass
TC-0010 DEVELOPER成员 ✅ pass
TC-0011 SQL注入 ✅ pass
TC-0012 缺少必填字段(productCode现为必填) ✅ pass
TC-0013 产品成员被禁用时拒绝登录-HTTP(H-3) ✅ pass
TC-0014 产品被禁用时拒绝登录-HTTP(H-3) ✅ pass

2.2 REST API — 管理后台登录 (TC-0015 ~ TC-0024)

TC编号 测试场景 测试结果
TC-0015 超管正常登录(管理后台) ✅ pass
TC-0016 普通用户被拒绝(审计H1修复: 仅超管可登录) ✅ pass
TC-0017 managementKey无效 ✅ pass
TC-0018 managementKey为空 ✅ pass
TC-0019 用户不存在 ✅ pass
TC-0020 密码错误 ✅ pass
TC-0021 账号冻结 ✅ pass
TC-0022 不带productCode时perms为空 ✅ pass
TC-0023 缺少必填字段(handler校验) ✅ pass
TC-0024 SQL注入username ✅ pass

2.3 REST API — 刷新Token (TC-0025 ~ TC-0031)

TC编号 测试场景 测试结果
TC-0025 正常刷新 ✅ pass
TC-0026 不带productCode(回退) ✅ pass
TC-0027 token无效 ✅ pass
TC-0028 用户已删除 ✅ pass
TC-0029 账号冻结 ✅ pass
TC-0030 超管+productCode ✅ pass
TC-0031 尝试切换产品被拒绝(H-02) ✅ pass
TC-0543 TokenVersion不匹配时拒绝刷新 ✅ pass
TC-0544 使用accessToken作为refreshToken被拒绝 ✅ pass
TC-0545 产品成员已移除时拒绝刷新(403) ✅ pass

2.4 REST API — 同步权限 (TC-0032 ~ TC-0044)

TC编号 测试场景 测试结果
TC-0032 全部新增 ✅ pass
TC-0033 更新已有(名称变更) ✅ pass
TC-0034 无变化 ✅ pass
TC-0035 禁用权限重启 ✅ pass
TC-0036 移除不在列表的权限 ✅ pass
TC-0037 空perms数组被拒绝(400) ✅ pass
TC-0038 验证disabled返回值 ✅ pass
TC-0039 appKey无效 ✅ pass
TC-0040 appSecret错误 ✅ pass
TC-0041 产品已禁用 ✅ pass
TC-0042 大批量(1000条) ✅ pass
TC-0043 重复code去重(M-09) ✅ pass
TC-0044 事务保护-中途失败回滚(H-05) ✅ pass

2.5 REST API — 用户信息 / 修改密码 (TC-0045 ~ TC-0059)

TC编号 测试场景 测试结果
TC-0045 正常获取-含productCode ✅ pass
TC-0046 不含productCode ✅ pass
TC-0047 未登录 ✅ pass
TC-0048 token过期 ✅ pass
TC-0049 userId=0 ✅ pass
TC-0050 正常修改 ✅ pass
TC-0051 mustChangePassword重置 ✅ pass
TC-0052 原密码错误 ✅ pass
TC-0053 新密码少于6字符 ✅ pass
TC-0054 新密码恰好6字符 ✅ pass
TC-0055 新密码空字符串 ✅ pass
TC-0056 新密码超过72字符 ✅ pass
TC-0057 新密码恰好72字符 ✅ pass
TC-0058 新旧密码相同 ✅ pass
TC-0059 用户不存在 ✅ pass

2.6 REST API — 产品管理 (TC-0060 ~ TC-0078)

TC编号 测试场景 测试结果
TC-0060 正常创建 ✅ pass
TC-0061 事务回滚-用户创建失败 ✅ pass
TC-0062 事务回滚-成员创建失败 ✅ pass
TC-0063 编码已存在 ✅ pass
TC-0064 并发创建同编码 ✅ pass
TC-0065 正常更新 ✅ pass
TC-0066 不存在 ✅ pass
TC-0067 不传status ✅ pass
TC-0068 正常分页 ✅ pass
TC-0069 默认分页 ✅ pass
TC-0070 pageSize超过上限 ✅ pass
TC-0071 pageSize=0 ✅ pass
TC-0072 page负值 ✅ pass
TC-0073 正常查询 ✅ pass
TC-0074 不存在 ✅ pass
TC-0075 非超管AppKey隐藏(H-11) ✅ pass
TC-0076 超管可见AppKey(H-11) ✅ pass
TC-0077 详情非超管AppKey隐藏(H-11) ✅ pass
TC-0078 详情超管可见AppKey(H-11) ✅ pass

2.7 REST API — 部门管理 (TC-0079 ~ TC-0100)

TC编号 测试场景 测试结果
TC-0079 创建顶级部门 ✅ pass
TC-0080 创建子部门 ✅ pass
TC-0081 父部门不存在 ✅ pass
TC-0082 不传DeptType默认NORMAL ✅ pass
TC-0083 传DeptType=DEV ✅ pass
TC-0084 事务内FindOneWithTx可见性 ✅ pass
TC-0085 事务回滚-Insert失败 ✅ pass
TC-0086 事务回滚-UpdateWithTx失败 ✅ pass
TC-0087 多层嵌套(5层) ✅ pass
TC-0088 通过Logic创建+验证Path ✅ pass
TC-0089 正常更新 ✅ pass
TC-0090 不存在 ✅ pass
TC-0091 DeptType NORMAL→DEV ✅ pass
TC-0092 DeptType无效值返回错误(400) ✅ pass
TC-0094 正常删除(无子部门) ✅ pass
TC-0095 有子部门 ✅ pass
TC-0096 不存在的部门 ✅ pass
TC-0098 正常获取 ✅ pass
TC-0099 空数据 ✅ pass
TC-0100 孤儿节点 ✅ pass
TC-0097 部门下有关联用户(H-07) ✅ pass
TC-0093 DeptType变更级联清除缓存(M-10) ✅ pass

2.8 REST API — 权限列表 (TC-0101 ~ TC-0104)

TC编号 测试场景 测试结果
TC-0101 正常查询 ✅ pass
TC-0102 默认分页 ✅ pass
TC-0103 pageSize超过上限 ✅ pass
TC-0104 不存在的productCode ✅ pass

2.9 REST API — 角色管理 (TC-0105 ~ TC-0121)

TC编号 测试场景 测试结果
TC-0105 正常创建 ✅ pass
TC-0106 重复角色名 ✅ pass
TC-0107 并发同名创建 ✅ pass
TC-0108 正常更新 ✅ pass
TC-0109 不存在 ✅ pass
TC-0110 正常查询 ✅ pass
TC-0111 pageSize超过上限 ✅ pass
TC-0112 正常查询 ✅ pass
TC-0113 不存在 ✅ pass
TC-0114 正常删除+级联 ✅ pass
TC-0115 事务回滚 ✅ pass
TC-0116 无关联数据 ✅ pass
TC-0117 正常绑定 ✅ pass
TC-0118 角色不存在 ✅ pass
TC-0119 清空权限 ✅ pass
TC-0120 重复permId ✅ pass
TC-0121 事务回滚 ✅ pass

2.10 REST API — 用户管理 (TC-0122 ~ TC-0177, TC-0522 ~ TC-0524)

TC编号 测试场景 测试结果
TC-0122 正常创建 ✅ pass
TC-0123 用户名已存在(预检) ✅ pass
TC-0124 带完整可选字段 ✅ pass
TC-0125 非法email格式 ✅ pass
TC-0126 合法email ✅ pass
TC-0127 email为空(可选) ✅ pass
TC-0128 非法phone格式 ✅ pass
TC-0129 合法phone(国际) ✅ pass
TC-0130 phone为空(可选) ✅ pass
TC-0131 并发同username(TOCTOU) ✅ pass
TC-0132 唯一索引冲突消息 ✅ pass
TC-0135 正常更新 ✅ pass
TC-0136 不存在 ✅ pass
TC-0137 仅传id ✅ pass
TC-0138 清空nickname ✅ pass
TC-0139 清空email ✅ pass
TC-0140 清空remark ✅ pass
TC-0141 非法email格式 ✅ pass
TC-0142 非法phone格式 ✅ pass
TC-0143 合法phone ✅ pass
TC-0144 不传email(nil) ✅ pass
TC-0145 DeptId设为0(取消部门) ✅ pass
TC-0146 DeptId设为正值 ✅ pass
TC-0147 DeptId不传(nil) ✅ pass
TC-0149 含productCode ✅ pass
TC-0150 不含productCode ✅ pass
TC-0151 pageSize超过上限 ✅ pass
TC-0152 用户不在产品中 ✅ pass
TC-0153 批量查询DB异常 ✅ pass
TC-0154 正常查询 ✅ pass
TC-0155 正常查询-含Avatar ✅ pass
TC-0156 不存在 ✅ pass
TC-0157 正常绑定 ✅ pass
TC-0158 用户不存在 ✅ pass
TC-0159 清空角色 ✅ pass
TC-0160 事务回滚 ✅ pass
TC-0165 正常ALLOW ✅ pass
TC-0166 用户不存在 ✅ pass
TC-0167 DENY权限 ✅ pass
TC-0168 清空权限 ✅ pass
TC-0173 正常冻结 ✅ pass
TC-0174 正常解冻 ✅ pass
TC-0175 非法status(0) ✅ pass
TC-0176 冻结自己 ✅ pass
TC-0177 冻结超管 ✅ pass
TC-0522 updateUser自己修改DeptId被拒绝(H-01) ✅ pass
TC-0523 updateUser自己修改Status被拒绝(H-01) ✅ pass
TC-0524 updateUser未登录被拒绝(H-01) ✅ pass
TC-0161 bindRoles角色不属于当前产品(H-03) ✅ pass
TC-0162 bindRoles角色已禁用(H-03) ✅ pass
TC-0163 bindRoles角色不存在(H-03) ✅ pass
TC-0164 BindRoles非产品成员被拒绝(L-4) ✅ pass
TC-0169 setUserPerms无效Effect值(H-04) ✅ pass
TC-0170 setUserPerms PermId不存在(H-04) ✅ pass
TC-0171 setUserPerms权限不属于当前产品(H-04) ✅ pass
TC-0172 SetUserPerms非产品成员被拒绝(L-5) ✅ pass
TC-0133 createUser密码少于6字符(H-10) ✅ pass
TC-0134 createUser密码超过72字符(H-10) ✅ pass
TC-0148 超管不能冻结另一超管(H-2) ✅ pass
TC-0546 createUser用户名含特殊字符被拒绝(400) ✅ pass
TC-0547 createUser用户名太短(1字符)被拒绝(400) ✅ pass
TC-0548 createUser用户名太长(65字符)被拒绝(400) ✅ pass
TC-0549 createUser部门不存在被拒绝(400) ✅ pass
TC-0550 createUser昵称超过64字符被拒绝(400) ✅ pass
TC-0551 createUser备注超过255字符被拒绝(400) ✅ pass
TC-0552 setUserPerms同一权限ID冲突Effect被拒绝(400) ✅ pass
TC-0553 setUserPerms重复权限ID相同Effect去重 ✅ pass
TC-0554 setUserPerms已禁用权限不能被设置(400) ✅ pass

2.11 REST API — 成员管理 (TC-0178 ~ TC-0194)

TC编号 测试场景 测试结果
TC-0178 正常添加 ✅ pass
TC-0179 产品不存在 ✅ pass
TC-0180 用户不存在 ✅ pass
TC-0181 已是成员 ✅ pass
TC-0182 并发添加 ✅ pass
TC-0184 正常更新 ✅ pass
TC-0185 不存在 ✅ pass
TC-0187 正常查询(批量查用户) ✅ pass
TC-0188 成员用户已删除 ✅ pass
TC-0189 pageSize超过上限 ✅ pass
TC-0190 空成员列表 ✅ pass
TC-0191 正常移除+级联(事务内) ✅ pass
TC-0192 跨产品隔离 ✅ pass
TC-0193 成员不存在 ✅ pass
TC-0194 事务回滚 ✅ pass
TC-0183 addMember无效MemberType(M-06) ✅ pass
TC-0186 updateMember无效MemberType(M-06) ✅ pass

2.12 gRPC 接口 (TC-0195 ~ TC-0222)

TC编号 测试场景 测试结果
TC-0195 正常同步 ✅ pass
TC-0196 appKey无效 ✅ pass
TC-0197 appSecret错误 ✅ pass
TC-0198 产品已禁用 ✅ pass
TC-0199 验证disabled计数 ✅ pass
TC-0200 正常登录(普通用户+productCode) ✅ pass
TC-0201 用户不存在 ✅ pass
TC-0202 密码错误 ✅ pass
TC-0203 账号冻结 ✅ pass
TC-0204 超管被拒绝(PermissionDenied) ✅ pass
TC-0205 普通用户+productCode ✅ pass
TC-0206 gRPC Login禁用成员被拒绝(H-3) ✅ pass
TC-0207 productCode为空(InvalidArgument) ✅ pass
TC-0208 正常刷新 ✅ pass
TC-0209 token无效 ✅ pass
TC-0210 账号冻结 ✅ pass
TC-0211 productCode回退到claims ✅ pass
TC-0212 超管+productCode ✅ pass
TC-0213 普通用户+productCode ✅ pass
TC-0214 有效token ✅ pass
TC-0215 无效token ✅ pass
TC-0216 缺少userId ✅ pass
TC-0217 gRPC VerifyToken冻结用户返回Invalid(H-4) ✅ pass
TC-0218 gRPC VerifyToken非成员返回Invalid(H-4) ✅ pass
TC-0219 gRPC VerifyToken返回实时数据(H-4) ✅ pass
TC-0220 用户不存在 ✅ pass
TC-0221 超管 ✅ pass
TC-0222 MEMBER-DENY覆盖 ✅ pass

2.13 中间件 / 统一响应 (TC-0223 ~ TC-0233, TC-0508 ~ TC-0510, TC-0525 ~ TC-0534)

TC编号 测试场景 测试结果
TC-0223 正常Bearer token ✅ pass
TC-0224 无Authorization头 ✅ pass
TC-0225 无Bearer前缀 ✅ pass
TC-0226 token签名错误 ✅ pass
TC-0227 token过期 ✅ pass
TC-0228 claims类型断言失败 ⏭️ skip(防御性分支不可达)
TC-0229 refresh token被拒绝 ✅ pass
TC-0508 冻结用户被403 ✅ pass
TC-0509 用户不存在(Status=0) ✅ pass
TC-0510 UserDetails注入context ✅ pass
TC-0230 业务错误(CodeError) ✅ pass
TC-0231 内部错误 ✅ pass
TC-0232 成功(有data) ✅ pass
TC-0233 成功(无data) ✅ pass
TC-0525 限流-正常请求(未超限) ✅ pass
TC-0526 限流-超限请求被拒绝(429) ✅ pass
TC-0527 限流-behindProxy=false时XFF被忽略 ✅ pass
TC-0528 限流-behindProxy=false时X-Real-IP被忽略 ✅ pass
TC-0529 限流-IP从RemoteAddr解析 ✅ pass
TC-0530 限流-不同IP独立限流 ✅ pass
TC-0531 限流-behindProxy=true时信任X-Real-IP ✅ pass
TC-0532 限流-behindProxy=true时无X-Real-IP回退RemoteAddr ✅ pass
TC-0533 限流-behindProxy=true时XFF仍被忽略 ✅ pass
TC-0534 限流-RemoteAddr无端口格式 ✅ pass

2.14 util 层 (TC-0234 ~ TC-0256)

TC编号 测试场景 测试结果
TC-0234 正常值 ✅ pass
TC-0235 page<=0 ✅ pass
TC-0236 page=-1 ✅ pass
TC-0237 pageSize<=0 ✅ pass
TC-0238 pageSize>100 ✅ pass
TC-0239 pageSize=100 ✅ pass
TC-0240 pageSize=101 ✅ pass
TC-0241 双零 ✅ pass
TC-0242 正常邮箱 ✅ pass
TC-0243 含点号 ✅ pass
TC-0244 含加号 ✅ pass
TC-0245 缺少@ ✅ pass
TC-0246 缺少域名 ✅ pass
TC-0247 缺少TLD ✅ pass
TC-0248 空字符串 ✅ pass
TC-0249 国内手机号 ✅ pass
TC-0250 带+国际码 ✅ pass
TC-0251 太短(6位) ✅ pass
TC-0252 恰好7位 ✅ pass
TC-0253 最长15位 ✅ pass
TC-0254 超长16位 ✅ pass
TC-0255 包含字母 ✅ pass
TC-0256 空字符串 ✅ pass

2.15 Logic 层单元测试 — JWT / 权限计算 / Helper (TC-0231 ~ TC-0280)

TC编号 测试场景 测试结果
TC-0257 正常生成 ✅ pass
TC-0258 解析token验证claims ✅ pass
TC-0259 空secret ✅ pass
TC-0260 空perms ✅ pass
TC-0261 过期时间验证 ✅ pass
TC-0262 正常生成 ✅ pass
TC-0263 解析验证 ✅ pass
TC-0264 productCode为空 ✅ pass
TC-0265 正常解析 ✅ pass
TC-0266 错误secret ✅ pass
TC-0267 无效token字符串 ✅ pass
TC-0268 空token ✅ pass
TC-0269 过期token ✅ pass
TC-0270 AccessToken误用 ✅ pass
TC-0231 超管 ✅ pass
TC-0232 超管+查询失败 ✅ pass
TC-0233 非产品成员 ✅ pass
TC-0234 成员查询失败(非ErrNotFound) ✅ pass
TC-0235 DEVELOPER成员 ✅ pass
TC-0236 ADMIN成员 ✅ pass
TC-0237 DEVELOPER+查询失败 ✅ pass
TC-0238 MEMBER-DEV部门-全权限 ✅ pass
TC-0239 MEMBER-DEV部门-查询权限失败 ✅ pass
TC-0240 MEMBER-非DEV部门-正常回退 ✅ pass
TC-0241 MEMBER-部门不存在-正常回退 ✅ pass
TC-0242 MEMBER-deptId=0-跳过部门检查 ✅ pass
TC-0243 MEMBER-无角色无自定义 ✅ pass
TC-0244 MEMBER-有角色权限 ✅ pass
TC-0245 MEMBER-角色跨产品过滤 ✅ pass
TC-0246 MEMBER-角色已禁用 ✅ pass
TC-0247 MEMBER-ALLOW添加 ✅ pass
TC-0248 MEMBER-DENY排除角色权限 ✅ pass
TC-0249 MEMBER-DENY排除ALLOW ✅ pass
TC-0250 MEMBER-ALLOW+角色去重 ✅ pass
TC-0251 MEMBER-最终perm.Status=2 ✅ pass
TC-0252 MEMBER-FindRoleIdsByUserId失败 ✅ pass
TC-0253 MEMBER-FindByIds(roles)失败 ✅ pass
TC-0254 MEMBER-FindPermIdsByRoleIds失败 ✅ pass
TC-0255 MEMBER-FindPermIdsByUserIdAndEffect(ALLOW)失败 ✅ pass
TC-0256 MEMBER-FindPermIdsByUserIdAndEffect(DENY)失败 ✅ pass
TC-0257 MEMBER-FindByIds(perms)失败 ✅ pass
TC-0272 GetUserId-正常 ✅ pass
TC-0273 GetUserId-空ctx ✅ pass
TC-0274 GetUsername-正常 ✅ pass
TC-0275 GetUsername-空ctx ✅ pass
TC-0276 GetProductCode-正常 ✅ pass
TC-0277 GetMemberType-正常 ✅ pass
TC-0278 IsSuperAdmin-是 ✅ pass
TC-0279 IsSuperAdmin-否 ✅ pass
TC-0280 IsSuperAdmin-空 ✅ pass
TC-0271 GetUserPerms委托到UserDetailsLoader(L-03) ✅ pass

2.16 Model 层 _gen.go 通用 CRUD / 批量方法 (TC-0281 ~ TC-0329)

以下每个 TC 为通用模式,适用于全部 9 个 Model,实际测试函数数 = TC × 模型数。

TC编号 测试场景 测试结果
TC-0281 正常插入 ✅ pass
TC-0283 唯一索引冲突 ✅ pass
TC-0284 缓存key生成正确 ✅ pass
TC-0285 事务内插入 ✅ pass
TC-0287 事务回滚后无数据 ✅ pass
TC-0288 正常查询(缓存未命中) ✅ pass
TC-0289 正常查询(缓存命中) ✅ pass
TC-0290 记录不存在 ✅ pass
TC-0291 DB异常(非ErrNotFound) ✅ pass
TC-0292 事务内正常查询 ✅ pass
TC-0293 事务内记录不存在 ✅ pass
TC-0294 事务内可见性 ✅ pass
TC-0295 正常更新 ✅ pass
TC-0297 记录不存在 ✅ pass
TC-0298 事务内更新 ✅ pass
TC-0299 正常删除 ✅ pass
TC-0300 记录不存在 ✅ pass
TC-0301 事务内删除 ✅ pass
TC-0302 正常事务 ✅ pass
TC-0303 fn返回错误 ✅ pass
TC-0304 获取表名 ✅ pass
TC-0305 空列表 ✅ pass
TC-0306 单条记录 ✅ pass
TC-0307 多条记录(3条) ✅ pass
TC-0309 唯一索引冲突 ✅ pass
TC-0310 大批量(1000条) ✅ pass
TC-0311 空列表 ✅ pass
TC-0312 正常多条 ✅ pass
TC-0313 事务回滚 ✅ pass
TC-0314 空列表 ✅ pass
TC-0315 单条记录 ✅ pass
TC-0316 多条记录(3条) ✅ pass
TC-0318 部分id不存在 ✅ pass
TC-0319 空列表 ✅ pass
TC-0320 正常多条 ✅ pass
TC-0321 单条 ✅ pass
TC-0322 多条 ✅ pass
TC-0323 vals数量正确 ✅ pass
TC-0324 空ids ✅ pass
TC-0325 单个id ✅ pass
TC-0326 多个id(3个) ✅ pass
TC-0327 包含不存在id ✅ pass
TC-0328 空ids ✅ pass
TC-0329 正常多条 ✅ pass
TC-0282 Insert含TokenVersion ✅ pass
TC-0286 InsertWithTx含TokenVersion ✅ pass
TC-0296 Update含TokenVersion ✅ pass
TC-0308 BatchInsert含TokenVersion ✅ pass
TC-0317 BatchUpdate不污染数据 ✅ pass

2.17 Model 层 _gen.go 唯一索引方法 (TC-0330 ~ TC-0365)

TC编号 Model 方法 测试场景 测试结果
TC-0330 SysUser FindOneByUsername 正常查询 ✅ pass
TC-0331 SysUser FindOneByUsername 不存在 ✅ pass
TC-0332 SysUser FindOneByUsernameWithTx 事务内正常查询 ✅ pass
TC-0333 SysUser FindOneByUsernameWithTx 事务内不存在 ✅ pass
TC-0334 SysProduct FindOneByAppKey 正常查询 ✅ pass
TC-0335 SysProduct FindOneByAppKey 不存在 ✅ pass
TC-0336 SysProduct FindOneByAppKeyWithTx 事务内正常查询 ✅ pass
TC-0337 SysProduct FindOneByAppKeyWithTx 事务内不存在 ✅ pass
TC-0338 SysProduct FindOneByCode 正常查询 ✅ pass
TC-0339 SysProduct FindOneByCode 不存在 ✅ pass
TC-0340 SysProduct FindOneByCodeWithTx 事务内正常查询 ✅ pass
TC-0341 SysProduct FindOneByCodeWithTx 事务内不存在 ✅ pass
TC-0342 SysPerm FindOneByProductCodeCode 正常查询 ✅ pass
TC-0343 SysPerm FindOneByProductCodeCode 不存在 ✅ pass
TC-0344 SysPerm FindOneByProductCodeCodeWithTx 事务内正常查询 ✅ pass
TC-0345 SysPerm FindOneByProductCodeCodeWithTx 事务内不存在 ✅ pass
TC-0346 SysRole FindOneByProductCodeName 正常查询 ✅ pass
TC-0347 SysRole FindOneByProductCodeName 不存在 ✅ pass
TC-0348 SysRole FindOneByProductCodeNameWithTx 事务内正常查询 ✅ pass
TC-0349 SysRole FindOneByProductCodeNameWithTx 事务内不存在 ✅ pass
TC-0350 SysRolePerm FindOneByRoleIdPermId 正常查询 ✅ pass
TC-0351 SysRolePerm FindOneByRoleIdPermId 不存在 ✅ pass
TC-0352 SysRolePerm FindOneByRoleIdPermIdWithTx 事务内正常查询 ✅ pass
TC-0353 SysRolePerm FindOneByRoleIdPermIdWithTx 事务内不存在 ✅ pass
TC-0354 SysUserPerm FindOneByUserIdPermId 正常查询 ✅ pass
TC-0355 SysUserPerm FindOneByUserIdPermId 不存在 ✅ pass
TC-0356 SysUserPerm FindOneByUserIdPermIdWithTx 事务内正常查询 ✅ pass
TC-0357 SysUserPerm FindOneByUserIdPermIdWithTx 事务内不存在 ✅ pass
TC-0358 SysUserRole FindOneByUserIdRoleId 正常查询 ✅ pass
TC-0359 SysUserRole FindOneByUserIdRoleId 不存在 ✅ pass
TC-0360 SysUserRole FindOneByUserIdRoleIdWithTx 事务内正常查询 ✅ pass
TC-0361 SysUserRole FindOneByUserIdRoleIdWithTx 事务内不存在 ✅ pass
TC-0362 SysProductMember FindOneByProductCodeUserId 正常查询 ✅ pass
TC-0363 SysProductMember FindOneByProductCodeUserId 不存在 ✅ pass
TC-0364 SysProductMember FindOneByProductCodeUserIdWithTx 事务内正常查询 ✅ pass
TC-0365 SysProductMember FindOneByProductCodeUserIdWithTx 事务内不存在 ✅ pass

2.18 Model 层 _gen.go 内部辅助方法 (TC-0366 ~ TC-0375)

TC编号 测试场景 测试结果
TC-0366 空ids ✅ pass
TC-0367 正常ids ✅ pass
TC-0368 部分不存在 ✅ pass
TC-0369 DB异常 ✅ pass
TC-0370 正常 ✅ pass
TC-0371 正常 ✅ pass
TC-0372 正常 ✅ pass
TC-0373 cachePrefix为空 ✅ pass
TC-0374 cachePrefix非空 ✅ pass
TC-0375 多唯一索引前缀(SysProduct) ✅ pass

2.19 Model 层自定义方法 (TC-0376 ~ TC-0460)

TC编号 测试场景 测试结果
TC-0376 正常分页 ✅ pass
TC-0377 第二页 ✅ pass
TC-0378 空表 ✅ pass
TC-0379 count查询失败 ✅ pass
TC-0380 list查询失败 ✅ pass
TC-0381 正常查询 ✅ pass
TC-0382 空deptIds ✅ pass
TC-0383 单个deptId ✅ pass
TC-0384 deptId不存在 ✅ pass
TC-0385 正常批量查询 ✅ pass
TC-0386 空ids ✅ pass
TC-0387 部分id不存在 ✅ pass
TC-0388 DB异常 ✅ pass
TC-0391 正常分页 ✅ pass
TC-0392 空表 ✅ pass
TC-0393 count失败 ✅ pass
TC-0394 正常分页 ✅ pass
TC-0395 不存在的productCode ✅ pass
TC-0396 正常查询(仅status=1) ✅ pass
TC-0397 无启用权限 ✅ pass
TC-0398 正常查询 ✅ pass
TC-0399 空结果 ✅ pass
TC-0400 正常 ✅ pass
TC-0401 空ids ✅ pass
TC-0402 正常查询 ✅ pass
TC-0403 空结果 ✅ pass
TC-0404 key唯一性 ✅ pass
TC-0405 codes非空-正常 ✅ pass
TC-0406 codes为空-全部禁用 ✅ pass
TC-0407 无需禁用 ✅ pass
TC-0408 DB异常 ✅ pass
TC-0411 正常查询 ✅ pass
TC-0412 空表 ✅ pass
TC-0413 正常查询 ✅ pass
TC-0414 无子部门 ✅ pass
TC-0415 正常查询 ✅ pass
TC-0416 LIKE注入已阻止 ✅ pass
TC-0417 无匹配 ✅ pass
TC-0418 正常分页 ✅ pass
TC-0419 空结果 ✅ pass
TC-0420 正常 ✅ pass
TC-0421 空ids ✅ pass
TC-0424 正常查询 ✅ pass
TC-0425 无绑定 ✅ pass
TC-0426 正常查询 ✅ pass
TC-0427 空roleIds ✅ pass
TC-0428 去重验证 ✅ pass
TC-0429 正常删除 ✅ pass
TC-0430 无绑定 ✅ pass
TC-0431 正常事务内删除 ✅ pass
TC-0432 正常查询 ✅ pass
TC-0433 无记录 ✅ pass
TC-0434 ALLOW ✅ pass
TC-0435 DENY ✅ pass
TC-0436 无记录 ✅ pass
TC-0437 正常删除 ✅ pass
TC-0438 事务内删除 ✅ pass
TC-0439 正常删除 ✅ pass
TC-0440 跨产品隔离 ✅ pass
TC-0441 事务内跨产品删除 ✅ pass
TC-0442 正常查询 ✅ pass
TC-0443 无绑定 ✅ pass
TC-0444 正常查询 ✅ pass
TC-0445 正常删除 ✅ pass
TC-0446 事务内删除 ✅ pass
TC-0447 正常删除 ✅ pass
TC-0448 正常删除 ✅ pass
TC-0449 跨产品隔离 ✅ pass
TC-0450 事务内跨产品删除 ✅ pass
TC-0453 正常分页 ✅ pass
TC-0454 空结果 ✅ pass
TC-0455 正常查询 ✅ pass
TC-0456 无成员身份 ✅ pass
TC-0457 正常批量 ✅ pass
TC-0458 空userIds ✅ pass
TC-0459 部分不是成员 ✅ pass
TC-0460 map key正确 ✅ pass
TC-0422 FindMinPermsLevelByUserIdAndProductCode-正常 ✅ pass
TC-0423 FindMinPermsLevelByUserIdAndProductCode-无角色 ✅ pass
TC-0409 FindAllCodesByProductCode-正常 ✅ pass
TC-0410 FindAllCodesByProductCode-无权限 ✅ pass
TC-0389 FindIdsByDeptId-正常 ✅ pass
TC-0390 FindIdsByDeptId-空部门 ✅ pass
TC-0451 FindUserIdsByRoleId-正常 ✅ pass
TC-0452 FindUserIdsByRoleId-无绑定 ✅ pass

2.20 访问控制 access.go (TC-0461 ~ TC-0484)

TC编号 测试场景 测试结果
TC-0461 RequireSuperAdmin-超管通过 ✅ pass
TC-0462 RequireSuperAdmin-ADMIN拒绝 ✅ pass
TC-0463 RequireSuperAdmin-MEMBER拒绝 ✅ pass
TC-0464 RequireSuperAdmin-未登录 ✅ pass
TC-0465 RequireProductAdmin-超管通过 ✅ pass
TC-0466 RequireProductAdmin-ADMIN通过 ✅ pass
TC-0467 RequireProductAdmin-DEVELOPER拒绝 ✅ pass
TC-0468 RequireProductAdmin-MEMBER拒绝 ✅ pass
TC-0469 RequireProductAdmin-未登录 ✅ pass
TC-0470 CheckMemberTypeAssignment-超管分配任何类型 ✅ pass
TC-0471 CheckMemberTypeAssignment-ADMIN分配DEVELOPER ✅ pass
TC-0472 CheckMemberTypeAssignment-同级拒绝 ✅ pass
TC-0473 CheckMemberTypeAssignment-越级拒绝 ✅ pass
TC-0474 CheckMemberTypeAssignment-MEMBER同级拒绝 ✅ pass
TC-0475 CheckMemberTypeAssignment-未登录 ✅ pass
TC-0476 CheckManageAccess-超管可管理任何人 ✅ pass
TC-0477 CheckManageAccess-操作自己 ✅ pass
TC-0478 CheckManageAccess-ADMIN跳过部门检查 ✅ pass
TC-0479 CheckManageAccess-无部门拒绝 ✅ pass
TC-0480 CheckManageAccess-目标用户无部门 ✅ pass
TC-0481 CheckManageAccess-不同部门拒绝 ✅ pass
TC-0482 CheckManageAccess-未登录 ✅ pass
TC-0484 memberTypePriority-全类型验证 ✅ pass
TC-0483 caller.DeptPath为空时拒绝(H-08) ✅ pass

2.21 UserDetailsLoader (TC-0485 ~ TC-0507)

TC编号 测试场景 测试结果
TC-0485 Load-DB加载(缓存miss) ✅ pass
TC-0486 Load-缓存命中 ✅ pass
TC-0487 Load-用户不存在 ✅ pass
TC-0488 Load-productCode为空 ✅ pass
TC-0489 Del删除指定缓存 ✅ pass
TC-0490 Clean清除用户所有产品缓存 ✅ pass
TC-0491 CleanByProduct清除产品所有用户 ✅ pass
TC-0492 BatchDel批量删除 ✅ pass
TC-0493 BatchDel空数组 ✅ pass
TC-0494 loadPerms-超管全量权限 ✅ pass
TC-0495 loadPerms-ADMIN全量权限 ✅ pass
TC-0496 loadPerms-DEVELOPER全量权限 ✅ pass
TC-0497 loadPerms-DEV部门全量权限 ✅ pass
TC-0498 loadPerms-MEMBER角色权限+ALLOW-DENY ✅ pass
TC-0501 loadRoles-多角色取最小permsLevel ✅ pass
TC-0502 loadRoles-无角色 ✅ pass
TC-0503 loadRoles-角色跨产品过滤 ✅ pass
TC-0504 loadRoles-禁用角色不计入 ✅ pass
TC-0505 loadMembership-超管自动SUPER_ADMIN ✅ pass
TC-0506 loadMembership-非成员MemberType为空 ✅ pass
TC-0499 loadPerms跨产品权限隔离(H-1) ✅ pass
TC-0507 loadMembership禁用成员MemberType为空(H-3) ✅ pass
TC-0500 loadPerms禁用DEV部门无全量权限(M-3) ✅ pass

2.22 Logic 层访问控制负面测试 (TC-0511 ~ TC-0521)

TC编号 测试场景 测试结果
TC-0511 createDept-非超管拒绝 ✅ pass
TC-0512 updateDept-非超管拒绝 ✅ pass
TC-0513 deleteDept-非超管拒绝 ✅ pass
TC-0514 createProduct-非超管拒绝 ✅ pass
TC-0515 updateProduct-非超管拒绝 ✅ pass
TC-0516 createUser-非产品管理员拒绝 ✅ pass
TC-0517 createRole-非产品管理员拒绝 ✅ pass
TC-0518 updateRole-非产品管理员拒绝 ✅ pass
TC-0519 deleteRole-非产品管理员拒绝 ✅ pass
TC-0520 bindRolePerms-非产品管理员拒绝 ✅ pass
TC-0521 updateUser-MEMBER不能管理他人 ✅ pass

2.23 审计修复验证 (TC-0535 ~ TC-0542)

TC编号 测试场景 测试结果
TC-0535 updateUser-产品管理员可管理范围内用户 (Audit#4) ✅ pass
TC-0536 updateUser-昵称超长拒绝 ✅ pass
TC-0537 updateUser-部门不存在 ✅ pass
TC-0538 userList-非超管仅可见产品成员 (Audit#1) ✅ pass
TC-0539 userList-非超管未指定productCode被拒绝 (Audit#1) ✅ pass
TC-0540 userList-非超管使用错误productCode被拒绝 (Audit#1) ✅ pass
TC-0541 bindRoles-permsLevel越权拒绝 (Audit#2) ✅ pass
TC-0542 bindRoles-超管可分配任意级别角色 (Audit#2) ✅ pass

三、测试覆盖统计

指标 数值
TC 总数 554
已实现 553 (99.8%)
跳过 1 (TC-0228,防御性不可达分支)
未实现 0
测试函数 730
测试子用例 812
✅ 通过 811
❌ 失败 0
⏭️ 跳过 1 (TC-0228)
通过率 100% (811/811,排除不可达分支)

3.1 未实现 TC 说明

TC编号 原因
TC-0228 防御性不可达分支,claims类型断言失败场景在正常运行时无法触发,已 t.Skip