xiaoyi
2026-10-30 8425165ea7b70d0ea605a7f058a7d0adaf0dbdc8
feat(db): 给普通角色开放请假功能权限

请假菜单原先只授权给 超级管理员/测试数据权限12/咖啡操作师,
而实际员工都在「普通角色」下(94 个账号),导致员工访问请假全部 403。

授权范围(只开请假,不动其它 HR 模块):
6001 人力资源 / 6002 人事审批 / 6003 请假申请
+ hrm:leave:query / create / update / delete / submit / cancel / export

明确不开放:员工管理、员工合同、考勤管理、薪酬管理、调岗、离职。

注:直接 INSERT system_role_menu 不会触发 @CacheEvict,
需要手动清理 Redis db5/db6 的 menu_role_ids:* 与 permission_menu_ids:*,
否则权限校验仍读旧缓存导致 403。
已添加1个文件
72 ■■■■■ 文件已修改
sql/mysql/grant_leave_perm_common_role_20261030.sql 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/grant_leave_perm_common_role_20261030.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
-- ============================================================
-- ç»™ã€Œæ™®é€šè§’色」开放请假功能
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-30
--
-- èƒŒæ™¯ï¼šè¯·å‡æ˜¯å‘˜å·¥è‡ªåŠ©åŠŸèƒ½ï¼Œä½†èœå• 6003「人事审批 â†’ è¯·å‡ç”³è¯·ã€
--      åŽŸå…ˆåªæŽˆæƒç»™ è¶…级管理员 / æµ‹è¯•数据权限12 / å’–啡操作师,
--      è€Œå®žé™…员工都在「普通角色」下(共 94 ä¸ªè´¦å·ï¼‰ï¼Œ
--      å¯¼è‡´å‘˜å·¥è®¿é—®è¯·å‡åŠŸèƒ½å…¨éƒ¨ 403,只有管理员能代录。
--
-- æŽˆæƒèŒƒå›´ï¼ˆåªå¼€è¯·å‡ï¼Œä¸å¼€å…¶å®ƒ HR æ¨¡å—):
--   6001  äººåŠ›èµ„æº        ï¼ˆçˆ¶çº§ç›®å½•,不加则子菜单无法显示)
--   6002  äººäº‹å®¡æ‰¹        ï¼ˆçˆ¶çº§ç›®å½•)
--   6003  è¯·å‡ç”³è¯·        ï¼ˆèœå•本身)
--   60031 è¯·å‡ç”³è¯·æŸ¥è¯¢    hrm:leave:query
--   60032 è¯·å‡ç”³è¯·æ–°å¢ž    hrm:leave:create
--   60033 è¯·å‡ç”³è¯·ä¿®æ”¹    hrm:leave:update
--   60034 è¯·å‡ç”³è¯·åˆ é™¤    hrm:leave:delete
--   60035 è¯·å‡ç”³è¯·æäº¤    hrm:leave:submit
--   60242 æ’¤é”€            hrm:leave:cancel
--   1075444 å¯¼å‡º          hrm:leave:export
--
-- æ˜Žç¡®ã€ä¸ã€‘开放(避免员工越权看到敏感数据):
--   6006  å‘˜å·¥ç®¡ç†        1063105 å‘˜å·¥åˆåŒ
--   6010  è€ƒå‹¤ç®¡ç†        6020    è–ªé…¬ç®¡ç†
--   6004  è°ƒå²—申请        6005    ç¦»èŒç”³è¯·
--   1065211 åŠ ç­ç”³è¯·      ï¼ˆå¦‚需开放请另行确认)
--
-- å¹‚等:NOT EXISTS åˆ¤æ–­ï¼Œå¯é‡å¤æ‰§è¡Œ
-- å›žæ»šï¼šDELETE FROM system_role_menu WHERE role_id=2 AND menu_id IN (6001,6002,6003,60031,60032,60033,60034,60035,60242,1075444);
-- ============================================================
-- ---------- 1. æŽˆæƒå‰ï¼šæ™®é€šè§’色已有的 HR èœå• ----------
SELECT x.menu_id, m.name FROM system_role_menu x
  JOIN system_menu m ON m.id = x.menu_id
 WHERE x.role_id = 2 AND x.deleted = b'0'
   AND (m.id = 6001 OR m.parent_id IN (6001, 6002) OR m.id = 6002)
 ORDER BY x.menu_id;
-- ---------- 2. æ’入授权 ----------
INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted)
SELECT 2, t.menu_id, '1', NOW(), '1', NOW(), b'0'
  FROM (
    SELECT 6001 AS menu_id UNION ALL
    SELECT 6002 UNION ALL
    SELECT 6003 UNION ALL
    SELECT 60031 UNION ALL
    SELECT 60032 UNION ALL
    SELECT 60033 UNION ALL
    SELECT 60034 UNION ALL
    SELECT 60035 UNION ALL
    SELECT 60242 UNION ALL
    SELECT 1075444
  ) t
 WHERE NOT EXISTS (
   SELECT 1 FROM system_role_menu x
    WHERE x.role_id = 2 AND x.menu_id = t.menu_id
 );
-- ---------- 3. æŽˆæƒåŽæ ¡éªŒ ----------
SELECT x.menu_id, m.name, m.permission
  FROM system_role_menu x
  JOIN system_menu m ON m.id = x.menu_id
 WHERE x.role_id = 2 AND x.deleted = b'0'
   AND x.menu_id IN (6001,6002,6003,60031,60032,60033,60034,60035,60242,1075444)
 ORDER BY x.menu_id;
-- ---------- 4. ç¡®è®¤æ²¡æœ‰è¯¯å¼€å…¶å®ƒ HR æ¨¡å— ----------
SELECT m.id, m.name FROM system_role_menu x
  JOIN system_menu m ON m.id = x.menu_id
 WHERE x.role_id = 2 AND x.deleted = b'0'
   AND (m.id IN (6004,6005,6006,6010,6020,1063105,1065211)
        OR m.parent_id IN (6004,6005,6006,6010,6020,1063105,1065211));