-- ============================================= -- 考勤规则:导入按钮权限点 -- -- 背景:新增 /hrm/attendance/rule/import 与 /get-import-template 两个接口, -- 权限码 hrm:attendance-rule:import 在 system_menu 中不存在, -- 会导致非超级管理员调用时 403。 -- -- 做法:补一个 type=3 的按钮权限点(不显示在侧栏),并授权给所有现有启用角色, -- 与既有「考勤规则查询/新增/修改/删除/导出」的授权范围保持一致。 -- -- 动态 id(MAX(id)+1),可重复执行(幂等)。 -- ============================================= SET NAMES utf8mb4; -- 1. 定位父菜单:考勤规则(优先按 path,兜底按既有权限码反查) SET @hrm := (SELECT id FROM `system_menu` WHERE `path` IN ('hrm','/hrm') AND `deleted`=b'0' LIMIT 1); SET @att := (SELECT id FROM `system_menu` WHERE `path`='attendance' AND `parent_id`=@hrm AND `deleted`=b'0' LIMIT 1); SET @att_rule := (SELECT `parent_id` FROM `system_menu` WHERE `permission`='hrm:attendance-rule:query' AND `deleted`=b'0' LIMIT 1); SET @att_rule := IFNULL(@att_rule, (SELECT id FROM `system_menu` WHERE `path`='rule' AND `parent_id`=@att AND `deleted`=b'0' LIMIT 1)); -- 2. 插入权限点 SET @perm_exists := (SELECT COUNT(*) FROM `system_menu` WHERE `permission`='hrm:attendance-rule:import'); SET @import_menu_id := IFNULL((SELECT MAX(id) FROM `system_menu`), 0) + 1; INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`,`path`,`icon`,`component`, `component_name`,`status`,`visible`,`keep_alive`,`always_show`, `creator`,`create_time`,`updater`,`update_time`,`deleted`) SELECT @import_menu_id, '考勤规则导入', 'hrm:attendance-rule:import', 3, 6, @att_rule, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' FROM DUAL WHERE @perm_exists = 0 AND @att_rule IS NOT NULL; -- 3. 授权给所有现有启用角色 SET @menu_id := (SELECT id FROM `system_menu` WHERE `permission`='hrm:attendance-rule:import' AND `deleted`=b'0' LIMIT 1); INSERT INTO `system_role_menu` (`role_id`,`menu_id`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) SELECT r.`id`, @menu_id, '1', NOW(), '1', NOW(), b'0' FROM `system_role` r WHERE @menu_id IS NOT NULL AND r.`deleted` = b'0' AND r.`status` = 0 AND NOT EXISTS (SELECT 1 FROM `system_role_menu` rm WHERE rm.`role_id` = r.`id` AND rm.`menu_id` = @menu_id AND rm.`deleted` = b'0'); -- 4. 核对 SELECT id, name, permission, type, parent_id FROM `system_menu` WHERE permission = 'hrm:attendance-rule:import'; SELECT r.id AS role_id, r.name AS role_name, rm.menu_id FROM `system_role` r LEFT JOIN `system_role_menu` rm ON rm.role_id = r.id AND rm.menu_id = @menu_id AND rm.deleted = b'0' WHERE r.deleted = b'0' AND r.status = 0; SELECT 'hrm:attendance-rule:import 权限点初始化完成' AS result;