tuqin
6 天以前 7c03af0e4cabb12e27b2070c849758428a3600cc
fix(hrm): 补齐薪酬模块缺失的 7 个权限项,修复非超管角色 403

问题:非超级管理员角色即使被授予「薪酬管理」菜单,点进去也报
「没有该操作权限」。

根因:菜单表里的权限码是 hrm:salary-calculation:* / hrm:salary-payment:*,
而后端 Controller 校验的是 hrm:salary:query / :calculate / :confirm /
:delete / :export / :generate / :pay,两套编码完全对不上。
菜单表里根本没有后端要的权限项,所以在「角色管理」里无论怎么勾选,
角色都拿不到对应权限码。超级管理员因框架直接放行所以只有 admin 能用。

修复:补 7 个权限项(type=3),挂到「薪酬核算」(6021) 与「薪资发放」(6022):
hrm:salary:query 薪酬查看
hrm:salary:calculate 核算执行
hrm:salary:confirm 核算确认
hrm:salary:delete 核算删除
hrm:salary:export 核算导出
hrm:salary:generate 生成发放台账
hrm:salary:pay 薪资发放

已授权超管;其他角色需在「角色管理」里勾选对应项后生效。

注:原有的 hrm:salary-calculation:* / hrm:salary-payment:* 权限项保留不动,
不影响现有配置,只是它们不会被后端校验,属于历史遗留冗余项。
已添加1个文件
64 ■■■■■ 文件已修改
sql/mysql/hrm_salary_fix_permission.sql 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/hrm_salary_fix_permission.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
-- =====================================================================
-- ä¿®å¤è–ªé…¬æ¨¡å—「权限码不匹配」问题
--
-- é—®é¢˜çŽ°è±¡ï¼š
--   éžè¶…级管理员角色,即使被授予「薪酬管理」菜单,点进去也报
--   ã€Œæ²¡æœ‰è¯¥æ“ä½œæƒé™ã€ï¼ˆHTTP 403)。
--
-- æ ¹å› ï¼š
--   èœå•表里的权限码是 hrm:salary-calculation:* / hrm:salary-payment:*,
--   ä½†åŽç«¯ Controller æ ¡éªŒçš„æ˜¯ hrm:salary:query / :calculate / :pay ç­‰ï¼Œ
--   ä¸¤å¥—编码完全对不上。菜单里根本没有后端要的那些权限项,
--   æ‰€ä»¥åœ¨ã€Œè§’色管理」里无论怎么勾选,角色都拿不到对应权限码。
--   è¶…级管理员因为框架直接放行,所以只有 admin èƒ½ç”¨ã€‚
--
-- ä¿®å¤æ–¹å¼ï¼š
--   æŠŠåŽç«¯å®žé™…校验的 7 ä¸ªæƒé™ç è¡¥æˆèœå•权限项(type=3),
--   æŒ‚在「薪酬核算」(6021) ä¸Žã€Œè–ªèµ„发放」(6022) ä¸‹ï¼Œ
--   ä¹‹åŽåœ¨ã€Œè§’色管理」里就能正常勾选。
--
-- ç‰¹æ€§ï¼šå¯é‡å¤æ‰§è¡Œ
-- =====================================================================
-- æ¸…理旧的补丁项(按 id æ®µï¼‰
DELETE FROM system_role_menu WHERE menu_id BETWEEN 60215 AND 60225;
DELETE FROM system_menu WHERE id BETWEEN 60215 AND 60225;
-- ---------------------------------------------------------------------
-- è–ªé…¬æ ¸ç®—(6021)下补:查看 / æ ¸ç®— / ç¡®è®¤ / åˆ é™¤ / å¯¼å‡º
-- ---------------------------------------------------------------------
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)
VALUES
(60215, '薪酬查看',   'hrm:salary:query',     3, 10, 6021, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(60216, '薪酬核算执行', 'hrm:salary:calculate', 3, 11, 6021, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(60217, '薪酬核算确认', 'hrm:salary:confirm',   3, 12, 6021, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(60218, '薪酬核算删除', 'hrm:salary:delete',    3, 13, 6021, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(60219, '薪酬核算导出', 'hrm:salary:export',    3, 14, 6021, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- ---------------------------------------------------------------------
-- è–ªèµ„发放(6022)下补:生成 / å‘放
-- ---------------------------------------------------------------------
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)
VALUES
(60220, '生成发放台账', 'hrm:salary:generate', 3, 10, 6022, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(60221, '薪资发放',     'hrm:salary:pay',      3, 11, 6022, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- ---------------------------------------------------------------------
-- è¶…级管理员授权(其他角色请在「角色管理」里自行勾选)
-- ---------------------------------------------------------------------
INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted)
SELECT 1, m.id, '1', NOW(), '1', NOW(), b'0'
FROM system_menu m
WHERE m.id BETWEEN 60215 AND 60225;
-- ---------------------------------------------------------------------
-- éªŒè¯ï¼šè–ªé…¬æ¨¡å—下的全部权限项
-- ---------------------------------------------------------------------
SELECT m.id, m.parent_id, m.name, m.permission, m.type
FROM system_menu m
WHERE m.id IN (6021, 6022) OR m.parent_id IN (6021, 6022)
ORDER BY m.parent_id, m.sort, m.id;