1.0.384.verify.sql 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. -- 1.0.384 verify: UATAdminA 应绑定 UAT_FUNCTION_USER 并能解析出菜单。
  2. --
  3. -- 约定(AutoVersionUpdate.RunVerifyScriptIfExists):
  4. -- 每条语句取「首行首列」当布尔断言,必须为真(非 0 / 非 NULL / 非空串)。
  5. -- 返回 0 行会得到 NULL → 判假 → 抛异常并中断启动。
  6. -- 因此断言一律写成 SELECT ... 返回标量 1,不要写「期望 0 行」式的查询。
  7. --
  8. -- 环境容错:本脚本随仓库分发到所有环境,而 UATAdminA / UAT_FUNCTION_USER
  9. -- 只存在于特定 UAT 库。账号不存在时主脚本为空操作,故断言同样短路为真,
  10. -- 避免在无该账号的库上误判失败。
  11. -- 1) 绑定已建立(账号不存在的库短路为真)
  12. SELECT IF(
  13. (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0,
  14. 1,
  15. (SELECT COUNT(*)
  16. FROM SysUserRole ur
  17. JOIN SysUser u ON u.Id = ur.UserId
  18. JOIN SysRole r ON r.Id = ur.RoleId
  19. WHERE u.Account = 'UATAdminA'
  20. AND r.Code = 'UAT_FUNCTION_USER')
  21. ) AS ok_binding;
  22. -- 2) 该账号可解析出菜单(role_menus > 0,同租户对照账号为 308)
  23. SELECT IF(
  24. (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0,
  25. 1,
  26. (SELECT COUNT(DISTINCT rm.MenuId)
  27. FROM SysUser u
  28. JOIN SysUserRole ur ON ur.UserId = u.Id
  29. JOIN SysRoleMenu rm ON rm.RoleId = ur.RoleId
  30. WHERE u.Account = 'UATAdminA')
  31. ) AS ok_menus;
  32. -- 3) 幂等性:不存在重复绑定(重复执行本脚本不产生第二条相同 UserId+RoleId)
  33. SELECT IF(
  34. (SELECT COUNT(*) FROM (
  35. SELECT ur.UserId, ur.RoleId
  36. FROM SysUserRole ur
  37. JOIN SysUser u ON u.Id = ur.UserId
  38. WHERE u.Account = 'UATAdminA'
  39. GROUP BY ur.UserId, ur.RoleId
  40. HAVING COUNT(*) > 1
  41. ) dup) = 0,
  42. 1, 0
  43. ) AS ok_no_duplicate;