-- ============================================================ -- 流量池预警配置独立权限码(业务受理入口卡片可独立隐藏) -- ============================================================ -- 背景: -- 「业务受理」页的入口卡片按 accessCodes 过滤显隐。 -- 「流量预警配置」与「流量池预警配置」原先共用同一组 -- cpm:iot:tSimWarningConfig:* 权限码,导致收权时两个入口一起消失。 -- 本脚本为流量池预警配置新增专属权限项 -- cpm:iot:tSimPoolWarnConfig:*,与原权限项并存。 -- -- 前置条件:Admin / UI 版本已包含「入口卡片按权限独立隐藏」的改动。 -- -- 兼容性: -- 1) sys_menu 保留原有 4 条 tSimWarningConfig 权限项,不动。 -- 2) 新增的 4 条 tSimPoolWarnConfig 权限项,按「拥有对应旧权限项的角色」自动授权, -- 因此存量角色在执行本脚本后: -- - 仍能看到「流量预警配置」入口(旧权限码保留) -- - 仍能看到「流量池预警配置」入口(新权限码已自动补授) -- - 调用 /iot/tSimWarningConfig/* 接口不会 403 -- (后端已把接口的 x-check-permission 改为「新码 OR 旧码」) -- 3) 后续若只想关闭「流量池预警配置」,管理员在角色管理里去掉新权限项即可, -- 不再影响「流量预警配置」。 -- 4) 超级管理员(role_id=1)走独立的超管判定,不依赖菜单权限,无需授权。 -- -- 执行范围:生产 / 预演 / 演示 环境各自的 db_iotlcm 库。 -- 幂等:可重复执行(先删后插)。 -- -- ============================================================ -- ------------------------------------------------------------ -- 1) 新增 4 条流量池预警配置权限项(挂在「业务受理」菜单下) -- ------------------------------------------------------------ DELETE FROM sys_menu WHERE perms IN ( 'iot:tSimPoolWarnConfig:excel:template', 'iot:tSimPoolWarnConfig:excel:submit', 'iot:tSimPoolWarnConfig:input:submit', 'iot:tSimPoolWarnConfig:range:submit' ); INSERT INTO sys_menu (menu_name, parent_id, level, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, remark) SELECT permissions.name, parent.menu_id, 2, permissions.order_num, '', '', '', 1, 0, 'F', '0', '0', permissions.perms, '#', '流量池预警配置(独立权限)' FROM sys_menu AS parent JOIN ( SELECT '下载流量池预警配置Excel模板' AS name, 20 AS order_num, 'iot:tSimPoolWarnConfig:excel:template' AS perms UNION ALL SELECT '提交流量池预警配置Excel', 21, 'iot:tSimPoolWarnConfig:excel:submit' UNION ALL SELECT '批量输入流量池预警配置', 22, 'iot:tSimPoolWarnConfig:input:submit' UNION ALL SELECT '连号流量池预警配置', 23, 'iot:tSimPoolWarnConfig:range:submit' ) AS permissions WHERE parent.component = 'iotlcm/tCommunication/tBusinessAcceptance/index'; -- ------------------------------------------------------------ -- 2) 角色授权:把新权限项授予「原本就拥有对应旧权限项」的角色 -- (即拥有 tSimWarningConfig 权限的角色,同步获得 tSimPoolWarnConfig) -- 注意:sys_role_menu 的 (tenant_id, role_id, menu_id) 是联合主键, -- data_scope 为 NOT NULL,沿用旧授权行的取值。 -- ------------------------------------------------------------ DELETE FROM sys_role_menu WHERE menu_id IN ( SELECT menu_id FROM sys_menu WHERE perms IN ( 'iot:tSimPoolWarnConfig:excel:template', 'iot:tSimPoolWarnConfig:excel:submit', 'iot:tSimPoolWarnConfig:input:submit', 'iot:tSimPoolWarnConfig:range:submit' ) ); INSERT INTO sys_role_menu (tenant_id, role_id, menu_id, data_scope) SELECT old.tenant_id, old.role_id, new.menu_id, old.data_scope FROM sys_role_menu AS old JOIN sys_menu AS old_menu ON old_menu.menu_id = old.menu_id JOIN sys_menu AS new ON new.parent_id = old_menu.parent_id AND new.perms = REPLACE(old_menu.perms, 'iot:tSimWarningConfig:', 'iot:tSimPoolWarnConfig:') WHERE old_menu.perms IN ( 'iot:tSimWarningConfig:excel:template', 'iot:tSimWarningConfig:excel:submit', 'iot:tSimWarningConfig:input:submit', 'iot:tSimWarningConfig:range:submit' ); -- ------------------------------------------------------------ -- 3) 校验(执行后手工跑,确认与预期一致) -- ------------------------------------------------------------ -- SELECT perms, COUNT(*) FROM sys_menu -- WHERE perms LIKE 'iot:tSimPoolWarnConfig:%' GROUP BY perms; -- 期望 4 行,各 1 条 -- -- SELECT r.role_id, r.role_name, COUNT(*) AS new_perms -- FROM sys_role_menu rm -- JOIN sys_menu m ON m.menu_id = rm.menu_id -- JOIN sys_role r ON r.role_id = rm.role_id -- WHERE m.perms LIKE 'iot:tSimPoolWarnConfig:%' -- GROUP BY r.role_id, r.role_name; -- 期望:与拥有 tSimWarningConfig 权限的角色集合完全相同