UAT-PLACEHOLDER-MENU-HIDE.ops.sql 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. -- ===========================================================================
  2. -- UAT 租户占位菜单收口 —— 人工运维脚本(对账报表 + 回滚)
  3. --
  4. -- ⚠️ 本文件**不会**被 AutoVersionUpdate 自动执行:
  5. -- LoadMigrationScripts(AutoVersionUpdate.cs:391-420)先排除 *.verify.sql,
  6. -- 再对 Path.GetFileNameWithoutExtension 做 Version.TryParse;
  7. -- "UAT-PLACEHOLDER-MENU-HIDE.ops" 解析失败 → 该文件被过滤掉。
  8. -- **不要给本文件加 1.0.<n> 版本号前缀**,否则会变成自动执行的迁移脚本。
  9. --
  10. -- 自动执行的断言在 1.0.424.verify.sql(真值标量,环境无关)。
  11. -- 本文件供人工按需执行,两段互相独立,**不要整文件一次跑完**。
  12. -- ===========================================================================
  13. -- ###########################################################################
  14. -- 第一段 · 对账报表(只读,可随时执行)
  15. -- ###########################################################################
  16. SET @t_uat := (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
  17. WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1 LIMIT 1);
  18. -- R0 租户解析
  19. SELECT 'R0 租户解析' AS Chk, @t_uat AS TenantId,
  20. (SELECT o.Code FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId WHERE t.Id = @t_uat) AS OrgCode;
  21. -- R1 抑制清单明细
  22. SELECT 'R1 抑制清单' AS Chk, s.MenuId, m.Path, m.Component, m.Status, s.Reason
  23. FROM ado_tenant_menu_suppression s JOIN SysMenu m ON m.Id = s.MenuId
  24. WHERE s.TenantId = @t_uat ORDER BY m.Path;
  25. -- R2 该租户 SysTenantMenu 总行数(收口前 493 → 收口后 477)
  26. SELECT 'R2 该租户租户菜单总行数' AS Chk, COUNT(*) AS Rows_
  27. FROM SysTenantMenu WHERE TenantId = @t_uat;
  28. -- R3 该租户当前仍可见的 planning 占位菜单(本轮范围内应为空;S9/S4/M11-M16 不在范围)
  29. SELECT 'R3 仍可见的占位菜单' AS Chk, m.Path, m.Component
  30. FROM SysMenu m
  31. JOIN SysTenantMenu tm ON tm.MenuId = m.Id AND tm.TenantId = @t_uat
  32. WHERE m.Status = 1 AND m.Type <> 3 AND m.Component = '/aidop/planning/index'
  33. ORDER BY m.Path;
  34. -- R4 跨租户对账:其余租户对这些菜单的授权行数(应各自保持原值不变)
  35. SELECT 'R4 跨租户授权' AS Chk, t.Id AS TenantId, o.Code AS OrgCode,
  36. (SELECT COUNT(*) FROM SysTenantMenu tm
  37. WHERE tm.TenantId = t.Id
  38. AND tm.MenuId IN (SELECT MenuId FROM ado_tenant_menu_suppression WHERE TenantId = @t_uat)) AS GrantedRows
  39. FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
  40. WHERE t.Id <> @t_uat ORDER BY t.Id;
  41. -- R5 SysRoleMenu 保留情况(本脚本从不改动它;用于确认回滚可精确还原)
  42. SELECT 'R5 角色授权保留' AS Chk, COUNT(*) AS Rows_
  43. FROM SysRoleMenu rm JOIN SysRole r ON r.Id = rm.RoleId
  44. WHERE r.TenantId = @t_uat
  45. AND rm.MenuId IN (SELECT MenuId FROM ado_tenant_menu_suppression WHERE TenantId = @t_uat);
  46. -- ###########################################################################
  47. -- 第二段 · 回滚(会改数据,确认后再单独执行)
  48. --
  49. -- 步骤:执行下方 DELETE → 重启后端(restart_aidop.sh)。
  50. -- AidopMenuLinkSync.EnsureLinked 会按原主键
  51. -- CommonUtil.GetFixedHashCode(""+tid+menuId, 1300000000000)
  52. -- 把 SysTenantMenu 授权行原样补回;SysRoleMenu 全程未被改动,
  53. -- 因此可见性精确还原到收口之前。该路径已实测验证。
  54. -- ###########################################################################
  55. -- DELETE FROM ado_tenant_menu_suppression
  56. -- WHERE TenantId = (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
  57. -- WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1 LIMIT 1);