1.0.535.verify.sql 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. -- ============================================================================
  2. -- 1.0.535 Batch 4B · S5 IQC 检验单详情隐藏菜单 · VERIFY
  3. --
  4. -- 执行契约(AutoVersionUpdate.RunVerifyScriptIfExists):每条语句经
  5. -- SqlQuerySingle<object> 取首行首列并要求 IsTruthy == true。故:
  6. -- ① 禁止 SET @var(返回 null 即判失败)—— 一律内联子查询;
  7. -- ② 每条语句返回「通过为真」的标量;
  8. -- ③ 文件必须以最后一条 SQL 的分号结束,末尾不得残留 comment-only 块
  9. -- (本文件注释内刻意不出现字面分号,避免任何 splitter 把注释切成空语句)。
  10. -- ============================================================================
  11. -- 菜单存在且字段口径完全正确(含 IsHide=1 / IsKeepAlive=0 两个本批关键位)
  12. SELECT COUNT(*) = 1 FROM SysMenu WHERE Id = 1329015010004 AND Pid = 1322000000015 AND Type = 2 AND Status = 1 AND IsHide = 1 AND IsKeepAlive = 0 AND IsAffix = 0 AND IsIframe = 0 AND OrderNo = 45 AND Title = 'IQC检验单详情' AND Name = 'aidopS5IqcInspBillDetail' AND Path = '/aidop/s5/iqc/detail/:id' AND Component = '/aidop/s5/iqc/iqcInspBillDetail';
  13. -- 路由 Path 唯一(未产生重复菜单)
  14. SELECT COUNT(*) = 1 FROM SysMenu WHERE Path = '/aidop/s5/iqc/detail/:id';
  15. -- 路由 Name 唯一(vue-router name 冲突会导致动态路由注册异常)
  16. SELECT COUNT(*) = 1 FROM SysMenu WHERE Name = 'aidopS5IqcInspBillDetail';
  17. -- 租户可见性:与 IQC 任务列表入口的租户面完全一致(继承口径成立)
  18. SELECT (SELECT COUNT(DISTINCT TenantId) FROM SysTenantMenu WHERE MenuId = 1329015010004) = (SELECT COUNT(DISTINCT TenantId) FROM SysTenantMenu WHERE MenuId = 1329015010001);
  19. -- 租户可见性:不存在「入口可见但详情不可见」的租户
  20. SELECT COUNT(*) = 0 FROM SysTenantMenu e WHERE e.MenuId = 1329015010001 AND NOT EXISTS (SELECT 1 FROM SysTenantMenu d WHERE d.MenuId = 1329015010004 AND d.TenantId = e.TenantId);
  21. -- 角色授权:与 IQC 任务列表入口的角色面完全一致(继承口径成立)
  22. SELECT (SELECT COUNT(DISTINCT RoleId) FROM SysRoleMenu WHERE MenuId = 1329015010004) = (SELECT COUNT(DISTINCT RoleId) FROM SysRoleMenu WHERE MenuId = 1329015010001);
  23. -- 角色授权:不存在「能进入口页但进不了详情页」的角色
  24. SELECT COUNT(*) = 0 FROM SysRoleMenu e WHERE e.MenuId = 1329015010001 AND NOT EXISTS (SELECT 1 FROM SysRoleMenu d WHERE d.MenuId = 1329015010004 AND d.RoleId = e.RoleId);
  25. -- 未越权:详情页授权面没有超出入口页(不得凭空多授角色)
  26. SELECT COUNT(*) = 0 FROM SysRoleMenu d WHERE d.MenuId = 1329015010004 AND NOT EXISTS (SELECT 1 FROM SysRoleMenu e WHERE e.MenuId = 1329015010001 AND e.RoleId = d.RoleId);
  27. -- 端到端可达性:S5 IQC 检验员角色成员可经角色到达该详情菜单
  28. SELECT COUNT(*) >= 1 FROM SysRoleMenu rm JOIN SysRole r ON r.Id = rm.RoleId WHERE rm.MenuId = 1329015010004 AND r.Code = 'ROLE_S5_IQC_INSPECTOR';
  29. -- 主键无重复(多行插入的 MAX(Id)+ROW_NUMBER() 写法正确性)
  30. SELECT COUNT(*) = COUNT(DISTINCT Id) FROM SysTenantMenu WHERE MenuId = 1329015010004;
  31. SELECT COUNT(*) = COUNT(DISTINCT Id) FROM SysRoleMenu WHERE MenuId = 1329015010004;
  32. -- 回归:来料检验目录下菜单由 3 增至 4,且 OrderNo 无重复
  33. SELECT COUNT(*) = 4 FROM SysMenu WHERE Pid = 1322000000015 AND Type = 2;
  34. SELECT COUNT(DISTINCT OrderNo) = COUNT(*) FROM SysMenu WHERE Pid = 1322000000015 AND Type = 2;
  35. -- 回归:三张既有 IQC 业务页仍为可见菜单(未被本脚本误伤为隐藏)
  36. SELECT COUNT(*) = 3 FROM SysMenu WHERE Id IN (1329015010001, 1329015010002, 1329015010003) AND IsHide = 0 AND Status = 1;