1.0.435.verify.sql 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -- ============================================================================
  2. -- 1.0.435 verify:按钮权限已移出业务页面、且被回归删除的授权已恢复。
  3. --
  4. -- 约定:每条语句取「首行首列」当布尔断言;返回 0 行会判假并中断启动,故一律返回标量。
  5. -- 口径:全部钉死精确 Id / TenantId / RoleId,不使用跨租户 RoleCode COUNT。
  6. -- 环境容错:非本项目夹具库上主脚本为空操作,断言同步短路为真。
  7. -- ============================================================================
  8. -- 1) 「库存查询」必须重新成为叶子(其下不得再挂任何子节点)
  9. -- 这是本次回归的直接触发条件:一旦它有未被持有的子节点,就会在角色保存时被删除。
  10. SELECT IF(
  11. (SELECT COUNT(*) FROM SysMenu WHERE Id = 1329015030003) = 0,
  12. 1,
  13. (SELECT COUNT(*) = 0 FROM SysMenu WHERE Pid = 1329015030003)
  14. ) AS ok_stock_query_is_leaf_again;
  15. -- 2) 6 个按钮权限全部已挂到隐藏管理目录下
  16. SELECT IF(
  17. (SELECT COUNT(*) FROM SysMenu WHERE Id = 1329015030100) = 0,
  18. 1,
  19. (SELECT COUNT(*) = 6 FROM SysMenu
  20. WHERE Type = 3 AND Pid = 1329015030100
  21. AND Permission LIKE 's5InventoryInbound:%')
  22. ) AS ok_buttons_moved_under_admin_dir;
  23. -- 3) 隐藏管理目录本身:Type=1 / 隐藏 / 启用 / 挂在 S5 物料仓储下
  24. SELECT IF(
  25. (SELECT COUNT(*) FROM SysMenu WHERE Id = 1329015030100) = 0,
  26. 1,
  27. (SELECT COUNT(*) = 1 FROM SysMenu
  28. WHERE Id = 1329015030100 AND Type = 1 AND IsHide = 1 AND Status = 1 AND Pid = 1321000006000)
  29. ) AS ok_admin_dir_shape;
  30. -- 4) 该隐藏目录不得授予任何角色(授予业务角色会把管理能力泄漏出去)
  31. SELECT (
  32. SELECT COUNT(*) = 0 FROM SysRoleMenu WHERE MenuId = 1329015030100
  33. ) AS ok_admin_dir_not_granted_to_any_role;
  34. -- 5) UAT_FUNCTION_USER 的「库存查询」授权已恢复,且精确 1 条
  35. SELECT IF(
  36. (SELECT COUNT(*) FROM SysRole WHERE Id = 838258976469061 AND TenantId = 838257186181189) = 0,
  37. 1,
  38. (SELECT COUNT(*) = 1
  39. FROM SysRoleMenu rm
  40. JOIN SysRole r ON r.Id = rm.RoleId
  41. WHERE rm.RoleId = 838258976469061
  42. AND rm.MenuId = 1329015030003
  43. AND r.TenantId = 838257186181189)
  44. ) AS ok_uat_stock_query_restored;
  45. -- 6) 权限点仍未扩散到任何角色(1.0.433 的安全不变量不得因本次搬迁被破坏)
  46. SELECT (
  47. SELECT COUNT(*) = 0
  48. FROM SysRoleMenu rm
  49. JOIN SysMenu m ON m.Id = rm.MenuId
  50. WHERE m.Type = 3 AND m.Permission LIKE 's5InventoryInbound:%'
  51. ) AS ok_no_role_holds_inbound_permission;
  52. -- 7) 6 个权限点仍然登记且启用(搬迁不得影响 JwtHandler 的命中)
  53. SELECT IF(
  54. (SELECT COUNT(*) FROM SysMenu WHERE Permission LIKE 's5InventoryInbound:%') = 0,
  55. 1,
  56. (SELECT COUNT(*) = 6 FROM SysMenu
  57. WHERE Type = 3 AND Status = 1 AND Permission LIKE 's5InventoryInbound:%')
  58. ) AS ok_six_permissions_still_registered;