|
@@ -1,33 +1,46 @@
|
|
|
-- 1.0.384 verify: UATAdminA 应绑定 UAT_FUNCTION_USER 并能解析出菜单。
|
|
-- 1.0.384 verify: UATAdminA 应绑定 UAT_FUNCTION_USER 并能解析出菜单。
|
|
|
|
|
+--
|
|
|
|
|
+-- 约定(AutoVersionUpdate.RunVerifyScriptIfExists):
|
|
|
|
|
+-- 每条语句取「首行首列」当布尔断言,必须为真(非 0 / 非 NULL / 非空串)。
|
|
|
|
|
+-- 返回 0 行会得到 NULL → 判假 → 抛异常并中断启动。
|
|
|
|
|
+-- 因此断言一律写成 SELECT ... 返回标量 1,不要写「期望 0 行」式的查询。
|
|
|
|
|
+--
|
|
|
|
|
+-- 环境容错:本脚本随仓库分发到所有环境,而 UATAdminA / UAT_FUNCTION_USER
|
|
|
|
|
+-- 只存在于特定 UAT 库。账号不存在时主脚本为空操作,故断言同样短路为真,
|
|
|
|
|
+-- 避免在无该账号的库上误判失败。
|
|
|
|
|
|
|
|
--- 1) 目标账号角色与可解析菜单数
|
|
|
|
|
--- 期望:roles = 4(原 3 个 SMART_OPS_* + 新增 UAT_FUNCTION_USER),role_menus > 0
|
|
|
|
|
-SELECT u.Account,
|
|
|
|
|
- u.AccountType,
|
|
|
|
|
- u.TenantId,
|
|
|
|
|
- COUNT(DISTINCT ur.RoleId) AS roles,
|
|
|
|
|
- COUNT(DISTINCT rm.MenuId) AS role_menus
|
|
|
|
|
-FROM SysUser u
|
|
|
|
|
-LEFT JOIN SysUserRole ur ON ur.UserId = u.Id
|
|
|
|
|
-LEFT JOIN SysRoleMenu rm ON rm.RoleId = ur.RoleId
|
|
|
|
|
-WHERE u.Account = 'UATAdminA'
|
|
|
|
|
-GROUP BY u.Id, u.Account, u.AccountType, u.TenantId;
|
|
|
|
|
|
|
+-- 1) 绑定已建立(账号不存在的库短路为真)
|
|
|
|
|
+SELECT IF(
|
|
|
|
|
+ (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0,
|
|
|
|
|
+ 1,
|
|
|
|
|
+ (SELECT COUNT(*)
|
|
|
|
|
+ FROM SysUserRole ur
|
|
|
|
|
+ JOIN SysUser u ON u.Id = ur.UserId
|
|
|
|
|
+ JOIN SysRole r ON r.Id = ur.RoleId
|
|
|
|
|
+ WHERE u.Account = 'UATAdminA'
|
|
|
|
|
+ AND r.Code = 'UAT_FUNCTION_USER')
|
|
|
|
|
+) AS ok_binding;
|
|
|
|
|
|
|
|
--- 2) 与同租户对照账号横向比对
|
|
|
|
|
--- 期望:UATAdminA 的 role_menus 与其余 5 个账号一致(308)
|
|
|
|
|
-SELECT u.Account,
|
|
|
|
|
- COUNT(DISTINCT rm.MenuId) AS role_menus
|
|
|
|
|
-FROM SysUser u
|
|
|
|
|
-LEFT JOIN SysUserRole ur ON ur.UserId = u.Id
|
|
|
|
|
-LEFT JOIN SysRoleMenu rm ON rm.RoleId = ur.RoleId
|
|
|
|
|
-WHERE u.TenantId = (SELECT TenantId FROM SysUser WHERE Account = 'UATAdminA')
|
|
|
|
|
-GROUP BY u.Id, u.Account
|
|
|
|
|
-ORDER BY u.Account;
|
|
|
|
|
|
|
+-- 2) 该账号可解析出菜单(role_menus > 0,同租户对照账号为 308)
|
|
|
|
|
+SELECT IF(
|
|
|
|
|
+ (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0,
|
|
|
|
|
+ 1,
|
|
|
|
|
+ (SELECT COUNT(DISTINCT rm.MenuId)
|
|
|
|
|
+ FROM SysUser u
|
|
|
|
|
+ JOIN SysUserRole ur ON ur.UserId = u.Id
|
|
|
|
|
+ JOIN SysRoleMenu rm ON rm.RoleId = ur.RoleId
|
|
|
|
|
+ WHERE u.Account = 'UATAdminA')
|
|
|
|
|
+) AS ok_menus;
|
|
|
|
|
|
|
|
--- 3) 幂等性:重复执行不应产生重复绑定
|
|
|
|
|
--- 期望:0 行
|
|
|
|
|
-SELECT UserId, RoleId, COUNT(*) AS dup
|
|
|
|
|
-FROM SysUserRole
|
|
|
|
|
-WHERE UserId = (SELECT Id FROM SysUser WHERE Account = 'UATAdminA')
|
|
|
|
|
-GROUP BY UserId, RoleId
|
|
|
|
|
-HAVING COUNT(*) > 1;
|
|
|
|
|
|
|
+-- 3) 幂等性:不存在重复绑定(重复执行本脚本不产生第二条相同 UserId+RoleId)
|
|
|
|
|
+SELECT IF(
|
|
|
|
|
+ (SELECT COUNT(*) FROM (
|
|
|
|
|
+ SELECT ur.UserId, ur.RoleId
|
|
|
|
|
+ FROM SysUserRole ur
|
|
|
|
|
+ JOIN SysUser u ON u.Id = ur.UserId
|
|
|
|
|
+ WHERE u.Account = 'UATAdminA'
|
|
|
|
|
+ GROUP BY ur.UserId, ur.RoleId
|
|
|
|
|
+ HAVING COUNT(*) > 1
|
|
|
|
|
+ ) dup) = 0,
|
|
|
|
|
+ 1, 0
|
|
|
|
|
+) AS ok_no_duplicate;
|