Procházet zdrojové kódy

fix(s6): restore production instruction menu access

Phase 1B 收尾 · UATAdminA 租户(838257186181189)生产指令菜单可见性:
- 1.0.450:授权 SysTenantMenu(838)+SysRoleMenu(UAT业务操作员) 生产记录管理/生产指令单列表(NOT EXISTS 幂等)
- 1.0.451:解除占位期 stale ado_tenant_menu_suppression 两条(按 TenantId+MenuId 业务键)
  + 补回 SysTenantMenu 授权(enforce 曾按抑制删除);只此租户/此两菜单
runtime:suppression removed(启动未重建) + tenant/role grant 启动后持久 + UATAdminA UI happy-path
(菜单可见→打开页面→过程检验→自动 MATCHED(UATD-GC-001/A.0)→只读快照抽屉 NUMERIC/NON_NUMERIC 正确)
page/prepare/detail API 200、无 403、Console 无 blocker;授权 delta 仅 2 菜单、未开放其他占位/租户/角色
YY968XX před 2 dny
rodič
revize
d7a7d0cb55

+ 9 - 3
server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET 通用权限开发平台</Description>
-    <AssemblyVersion>1.0.449</AssemblyVersion>
-    <FileVersion>1.0.449</FileVersion>
-    <Version>1.0.449</Version>
+    <AssemblyVersion>1.0.451</AssemblyVersion>
+    <FileVersion>1.0.451</FileVersion>
+    <Version>1.0.451</Version>
   </PropertyGroup>
 
   <ItemGroup>
@@ -637,6 +637,12 @@
     <None Update="UpdateScripts\1.0.445.sql">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Update="UpdateScripts\1.0.450.sql">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Update="UpdateScripts\1.0.451.sql">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Update="UpdateScripts\UAT-PLACEHOLDER-MENU-HIDE.ops.sql">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>

+ 25 - 0
server/Admin.NET.Web.Entry/UpdateScripts/1.0.450.sql

@@ -0,0 +1,25 @@
+-- S6 Phase 1B 收尾 · UATAdminA 所属租户(838257186181189)最小菜单授权(幂等)
+-- 仅补齐 S6「生产指令单列表」(MenuId=1329016010001) 正常显示所必需的、当前缺失的两级授权:
+--   缺失级 = 生产记录管理(1322000000019) + 生产指令单列表(1329016010001)
+--   (上级 Ai-DOP(1320990000101) / S6生产执行(1321000007000) 该租户+角色已授权,不重复)
+-- 角色 = UATAdminA 的 UAT业务操作员(838258976469061)(与兄弟菜单 过程检验单列表 现行授权模式一致)
+-- 严格范围:只此租户、只此角色、只此两菜单;不全量授权、不动其他租户/角色/权限模型、不删除既有关系。
+-- 幂等:NOT EXISTS 保护;固定 Id 防重复。
+
+-- ① SysTenantMenu(租户 838 缺失的两级)
+INSERT INTO SysTenantMenu (Id, TenantId, MenuId)
+SELECT 3000000000000021001, 838257186181189, 1322000000019
+WHERE NOT EXISTS (SELECT 1 FROM SysTenantMenu WHERE TenantId=838257186181189 AND MenuId=1322000000019);
+
+INSERT INTO SysTenantMenu (Id, TenantId, MenuId)
+SELECT 3000000000000021002, 838257186181189, 1329016010001
+WHERE NOT EXISTS (SELECT 1 FROM SysTenantMenu WHERE TenantId=838257186181189 AND MenuId=1329016010001);
+
+-- ② SysRoleMenu(UAT业务操作员 缺失的两级)
+INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
+SELECT 3000000000000021003, 838258976469061, 1322000000019
+WHERE NOT EXISTS (SELECT 1 FROM SysRoleMenu WHERE RoleId=838258976469061 AND MenuId=1322000000019);
+
+INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
+SELECT 3000000000000021004, 838258976469061, 1329016010001
+WHERE NOT EXISTS (SELECT 1 FROM SysRoleMenu WHERE RoleId=838258976469061 AND MenuId=1329016010001);

+ 30 - 0
server/Admin.NET.Web.Entry/UpdateScripts/1.0.451.sql

@@ -0,0 +1,30 @@
+-- S6 Phase 1B 收尾续 · 解除 UATAdminA 租户(838257186181189) 生产指令菜单的 stale suppression + 确保授权(幂等)
+-- 背景:生产指令单列表已完成 Phase 1A+1B,占位期登记的 ado_tenant_menu_suppression 已失效。
+--   AidopMenuLinkSync 每次启动读该表并删除对应 SysTenantMenu 授权行;故须先解除抑制,授权才能持久。
+-- 严格范围:只此租户、只这两菜单(生产记录管理 + 生产指令单列表);
+--   只删 ado_tenant_menu_suppression 的这两对;不动 SysMenu/SysRoleMenu 之外、不动其他租户/其他菜单 suppression。
+
+SET @T := 838257186181189;
+SET @Role := 838258976469061;  -- UATAdminA 的「UAT业务操作员」角色
+
+-- ① 解除 stale suppression(按业务键 TenantId+MenuId;幂等:不存在则删 0 行也成功;不依赖 surrogate Id)
+DELETE FROM ado_tenant_menu_suppression
+WHERE TenantId=@T AND MenuId IN (1322000000019, 1329016010001);
+
+-- ② 确保 SysTenantMenu 授权(enforce 曾按抑制删除,此处补回;父链 Ai-DOP/S6 已授权不重复;NOT EXISTS 幂等)
+INSERT INTO SysTenantMenu (Id, TenantId, MenuId)
+SELECT 3000000000000021005, @T, 1322000000019
+WHERE NOT EXISTS (SELECT 1 FROM SysTenantMenu WHERE TenantId=@T AND MenuId=1322000000019);
+
+INSERT INTO SysTenantMenu (Id, TenantId, MenuId)
+SELECT 3000000000000021006, @T, 1329016010001
+WHERE NOT EXISTS (SELECT 1 FROM SysTenantMenu WHERE TenantId=@T AND MenuId=1329016010001);
+
+-- ③ 确保 SysRoleMenu 授权(1.0.450 已落此两行,NOT EXISTS 自然 noop;保证本迁移自足)
+INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
+SELECT 3000000000000021007, @Role, 1322000000019
+WHERE NOT EXISTS (SELECT 1 FROM SysRoleMenu WHERE RoleId=@Role AND MenuId=1322000000019);
+
+INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
+SELECT 3000000000000021008, @Role, 1329016010001
+WHERE NOT EXISTS (SELECT 1 FROM SysRoleMenu WHERE RoleId=@Role AND MenuId=1329016010001);