| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- -- ============================================================================
- -- 1.0.433 verify:S5 冷链入站六个管理接口必须已登记权限,且未扩散到业务角色。
- --
- -- 约定(AutoVersionUpdate.RunVerifyScriptIfExists):
- -- 每条语句取「首行首列」当布尔断言,必须为真;返回 0 行会得到 NULL 判假并中断启动。
- -- 故每条断言一律返回标量真值,且不使用 SET(SET 不返回行 → 必然判假)。
- --
- -- 断言口径:全部钉死到精确 Permission / 精确 TenantId / 精确 RoleId,
- -- 不使用「RoleCode JOIN 后跨租户 COUNT」这种会产生跨租户假阳性的写法
- -- (该缺陷见 1.0.386.verify.sql,已由 1.0.431.verify.sql 纠正)。
- --
- -- 环境容错:非本项目夹具库(查不到 AIDOP 租户 / 库存查询菜单)上主脚本为空操作,
- -- 断言同步短路为真。
- -- ============================================================================
- -- 1) 六个权限点全部登记,且 Type=3 / Status=1
- SELECT IF(
- (SELECT COUNT(*) FROM SysMenu WHERE Name = 'aidopS5InventoryStockQuery' AND Type = 2) = 0,
- 1,
- (SELECT COUNT(*) = 6 FROM SysMenu
- WHERE Type = 3 AND Status = 1
- AND Permission IN (
- 's5InventoryInbound:bootstrap',
- 's5InventoryInbound:run-once',
- 's5InventoryInbound:reconcile',
- 's5InventoryInbound:transform-std',
- 's5InventoryInbound:transform-inventory-std',
- 's5InventoryInbound:daily-recon'))
- ) AS ok_six_permissions_registered;
- -- 2) 无重复登记(同一 Permission 只允许一条 Type=3)
- SELECT IF(
- (SELECT COUNT(*) FROM (
- SELECT Permission FROM SysMenu
- WHERE Type = 3
- AND Permission LIKE 's5InventoryInbound:%'
- GROUP BY Permission HAVING COUNT(*) > 1
- ) dup) = 0,
- 1, 0
- ) AS ok_no_duplicate_permission;
- -- 3) 挂载点正确:六个权限点都挂在「库存查询」页面菜单下
- SELECT IF(
- (SELECT COUNT(*) FROM SysMenu WHERE Name = 'aidopS5InventoryStockQuery' AND Type = 2) = 0,
- 1,
- (SELECT COUNT(*) = 6 FROM SysMenu m
- WHERE m.Type = 3
- AND m.Permission LIKE 's5InventoryInbound:%'
- AND m.Pid = (SELECT Id FROM SysMenu WHERE Name = 'aidopS5InventoryStockQuery' AND Type = 2 LIMIT 1))
- ) AS ok_mounted_under_stock_query;
- -- 4) 管理租户(AIDOP,拥有 AccountType=888 且无角色的 AIDopAdmin)已获得全部六条租户级授权
- SELECT IF(
- (SELECT COUNT(*) FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
- WHERE o.Code = 'AIDOP' AND t.Status = 1) = 0,
- 1,
- (SELECT COUNT(*) = 6
- FROM SysTenantMenu tm
- JOIN SysMenu m ON m.Id = tm.MenuId
- WHERE tm.TenantId = (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
- WHERE o.Code = 'AIDOP' AND t.Status = 1 LIMIT 1)
- AND m.Type = 3
- AND m.Permission LIKE 's5InventoryInbound:%')
- ) AS ok_admin_tenant_granted;
- -- 5) UAT 租户(全部账号 AccountType=777)**不得**获得租户级授权
- SELECT IF(
- (SELECT COUNT(*) FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
- WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1) = 0,
- 1,
- (SELECT COUNT(*) = 0
- FROM SysTenantMenu tm
- JOIN SysMenu m ON m.Id = tm.MenuId
- WHERE tm.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)
- AND m.Type = 3
- AND m.Permission LIKE 's5InventoryInbound:%')
- ) AS ok_uat_tenant_not_granted;
- -- 6) UAT_FUNCTION_USER(精确 RoleId 838258976469061,租户 838257186181189)无任何该权限
- SELECT IF(
- (SELECT COUNT(*) FROM SysRole
- WHERE Id = 838258976469061 AND TenantId = 838257186181189) = 0,
- 1,
- (SELECT COUNT(*) = 0
- FROM SysRoleMenu rm
- JOIN SysMenu m ON m.Id = rm.MenuId
- WHERE rm.RoleId = 838258976469061
- AND m.Type = 3
- AND m.Permission LIKE 's5InventoryInbound:%')
- ) AS ok_uat_function_user_has_none;
- -- 7) 权限未扩散到**任何**角色(本批刻意不做 SysRoleMenu 授权)
- SELECT (
- SELECT COUNT(*) = 0
- FROM SysRoleMenu rm
- JOIN SysMenu m ON m.Id = rm.MenuId
- WHERE m.Type = 3 AND m.Permission LIKE 's5InventoryInbound:%'
- ) AS ok_no_role_holds_permission;
|