tuqin
21 小时以前 1466672f09a4fc1037c78cc2bb096fca551c1683
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
-- =============================================
-- 考勤规则:导入按钮权限点
--
-- 背景:新增 /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;