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