-- 订单列表:补齐当前代码实际使用的按钮权限(MySQL)。 -- 同步计费 / 同步选中 / 行内同步计费:monitor:orderSource:sync。 -- 检测产品:monitor:orderSource:list,与查询共用,无独立权限键。 -- 操作记录:前端无独立权限指令,后端接口使用 monitor:orderSource:list。 -- 只补菜单,不自动扩大业务角色权限;执行后在角色管理中勾选「同步计费」。 -- 可重复执行;menu_id 使用自增,避免固定 ID 被占用。 SET NAMES utf8mb4; -- 先确认订单列表父菜单。若无结果,需先补页面菜单,本脚本不会插入孤立按钮。 SELECT menu_id, menu_name, parent_id, component, perms FROM sys_menu WHERE menu_type = 'C' AND (component = 'monitor/orderSource/index' OR perms = 'monitor:orderSource:list'); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) SELECT N'同步计费', p.menu_id, 2, '', NULL, 1, 0, 'F', '0', '0', 'monitor:orderSource:sync', '#', 'admin', sysdate(), N'订单列表:同步计费、同步选中、行内同步计费共用权限' FROM sys_menu p WHERE p.menu_type = 'C' AND (p.component = 'monitor/orderSource/index' OR p.perms = 'monitor:orderSource:list') AND NOT EXISTS ( SELECT 1 FROM sys_menu b WHERE b.parent_id = p.menu_id AND b.menu_type = 'F' AND b.perms = 'monitor:orderSource:sync' ); -- 核对结果:应在订单列表下面看到「查询」「同步计费」。 SELECT p.menu_id AS page_menu_id, p.menu_name AS page_name, b.menu_id AS button_menu_id, b.menu_name AS button_name, b.perms, b.status FROM sys_menu p LEFT JOIN sys_menu b ON b.parent_id = p.menu_id AND b.menu_type = 'F' WHERE p.menu_type = 'C' AND (p.component = 'monitor/orderSource/index' OR p.perms = 'monitor:orderSource:list') ORDER BY p.menu_id, b.order_num, b.menu_id; -- 可选:如需 SQL 授权,确认目标角色 ID 后单独执行以下语句。 -- 不要把截图中的角色权限字符 ORA_6043 直接当作数据库 role_id。 -- SET @target_role_id = 6043; -- 请替换为已确认的 sys_role.role_id -- INSERT INTO sys_role_menu (role_id, menu_id) -- SELECT r.role_id, b.menu_id -- FROM sys_role r -- JOIN sys_role_menu granted ON granted.role_id = r.role_id -- JOIN sys_menu p ON p.menu_id = granted.menu_id AND p.menu_type = 'C' -- JOIN sys_menu b ON b.parent_id = p.menu_id AND b.menu_type = 'F' -- WHERE r.role_id = @target_role_id -- AND (p.component = 'monitor/orderSource/index' OR p.perms = 'monitor:orderSource:list') -- AND b.perms = 'monitor:orderSource:sync' -- AND NOT EXISTS ( -- SELECT 1 FROM sys_role_menu rm -- WHERE rm.role_id = r.role_id AND rm.menu_id = b.menu_id -- );