fix(hrm): 补齐 HRM 后端校验的权限码菜单脚本
非超管角色打开考勤/薪酬/社保/调岗/离职/加班页面报「没有该操作权限」:
菜单里登记的是前端细粒度权限码(hrm:attendance-holiday:*、hrm:salary-calculation:*),
后端 Controller 的 @PreAuthorize 校验的是粗粒度码(hrm:attendance:*、hrm:salary:*),
而角色权限只从菜单表派生,导致后端要的码在角色树里根本勾不到。
脚本按 permission 判重补齐 34 个权限码按钮菜单,并授予「人资专员」角色;
另将 system:dept:query 一并授予(员工管理等页面的部门下拉走 /system/dept/list)。
幂等,可重复执行。已在九鸿生产库执行并验证。
Co-Authored-By: Claude Code <noreply@anthropic.com>
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- HRM æéç 对é½ï¼è¡¥é½å端 @PreAuthorize å®é
æ ¡éªçæéç èåï¼å¹¶æäºã人èµä¸åã |
| | | -- |
| | | -- é®é¢ï¼2026-08-12 çäº§åºæ system_menu é HRM æé®çæéç æ¹æäºå端ç»ç²åº¦ç |
| | | -- ï¼hrm:attendance-holiday:queryãhrm:salary-calculation:calculate çï¼ï¼ |
| | | -- ä½å端 Controller æ ¡éªçæ¯ç²ç²åº¦ç ï¼hrm:attendance:queryãhrm:salary:query çï¼ï¼ |
| | | -- è§è²æéåªä»èå表派ç â éè¶
管è§è²æå¼èå¤/èªé
¬/社ä¿/è°å²/离è/å çé¡µé¢ |
| | | -- ä¸å¾ 403ãæ²¡æè¯¥æä½æéããè¶
管走ç»è¿æ ¡éªï¼æä»¥ä¸ç´æ²¡æ´é²ã |
| | | -- |
| | | -- åæ³ï¼ä¸å¨å端ç»ç²åº¦ç ï¼è¡¥ä¸å¥å端å®é
使ç¨çæéç æé®èåï¼type=3ï¼ï¼ |
| | | -- åæè¿äºèåæäºã人èµä¸åãè§è²ãå¹çï¼å¯é夿§è¡ã |
| | | -- å¦å¤ HRM å页é¢çãé¨é¨ã䏿è°ç¨ /system/dept/listï¼æ ¡éª system:dept:queryï¼ï¼ |
| | | -- HR è§è²é»è®¤æ²¡æç³»ç»ç®¡çæéï¼ä¸å¹¶æäºå·²æçãé¨é¨æ¥è¯¢ãæé®ï¼èå 1017ï¼ã |
| | | -- |
| | | -- å·²äº 2026-10-30 å¨ä¹é¸¿ç产åºï¼42.63.70.90:9002/ruoyi-vue-proï¼æ§è¡å¹¶éªè¯ã |
| | | -- ============================================================================ |
| | | |
| | | SET NAMES utf8mb4; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ä¸ãæ°å¢æéç èåï¼ä¸åæ» idï¼æ permission å¤éï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'è夿¥è¯¢', 'hrm:attendance:query', 3, 10, 6011, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èå¤å¯¼åº', 'hrm:attendance:export', 3, 11, 6011, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:export' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'æå¡ï¼æ¥å£ï¼', 'hrm:attendance:clock', 3, 12, 6011, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:clock' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èå¤å¼å¸¸æäº¤', 'hrm:attendance:submit', 3, 10, 6012, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:submit' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'è夿°å¢', 'hrm:attendance:create', 3, 10, 6013, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:create' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èå¤ä¿®æ¹', 'hrm:attendance:update', 3, 11, 6013, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:update' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èå¤å é¤', 'hrm:attendance:delete', 3, 12, 6013, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:delete' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èå¤ç»è®¡çæï¼æ¥å£ï¼', 'hrm:attendance:calculate', 3, 10, 6015, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:attendance:calculate' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT '请å导åº', 'hrm:leave:export', 3, 10, 6003, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:leave:export' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'è°å²æ¥è¯¢', 'hrm:transfer:query', 3, 10, 6004, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:transfer:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'è°å²å¯¼åº', 'hrm:transfer:export', 3, 11, 6004, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:transfer:export' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'ç¦»èæ¥è¯¢', 'hrm:resignation:query', 3, 10, 6005, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:resignation:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT '离è导åº', 'hrm:resignation:export', 3, 11, 6005, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:resignation:export' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'å çæ¥è¯¢', 'hrm:overtime:query', 3, 10, 1065211, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:overtime:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'åå导å
¥', 'hrm:employee-contract:import', 3, 10, 1063105, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:employee-contract:import' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµæ¥è¯¢', 'hrm:salary:query', 3, 10, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµæ ¸ç®æ§è¡', 'hrm:salary:calculate', 3, 11, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:calculate' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµæ ¸ç®ç¡®è®¤', 'hrm:salary:confirm', 3, 12, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:confirm' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµå é¤', 'hrm:salary:delete', 3, 13, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:delete' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµå¯¼åº', 'hrm:salary:export', 3, 14, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:export' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµç»ææ¥è¯¢', 'hrm:salary-structure:query', 3, 15, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary-structure:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµç»ææ°å¢', 'hrm:salary-structure:create', 3, 16, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary-structure:create' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµç»æä¿®æ¹', 'hrm:salary-structure:update', 3, 17, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary-structure:update' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'èªèµç»æå é¤', 'hrm:salary-structure:delete', 3, 18, 6021, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary-structure:delete' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'åæ¾çæ', 'hrm:salary:generate', 3, 10, 6022, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:generate' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'åæ¾ï¼æ¥å£ï¼', 'hrm:salary:pay', 3, 11, 6022, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:salary:pay' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'ç¤¾ä¿æ¥è¯¢', 'hrm:social-security:query', 3, 10, 6023, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:social-security:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'ç¤¾ä¿æ°å¢', 'hrm:social-security:create', 3, 11, 6023, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:social-security:create' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT '社ä¿ä¿®æ¹', 'hrm:social-security:update', 3, 12, 6023, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:social-security:update' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT '社ä¿å é¤', 'hrm:social-security:delete', 3, 13, 6023, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:social-security:delete' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'ä¸ªç¨æ¥è¯¢', 'hrm:tax-rate:query', 3, 10, 6024, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:tax-rate:query' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT 'ä¸ªç¨æ°å¢', 'hrm:tax-rate:create', 3, 11, 6024, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:tax-rate:create' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT '个ç¨ä¿®æ¹', 'hrm:tax-rate:update', 3, 12, 6024, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:tax-rate:update' AND deleted = b'0'); |
| | | |
| | | INSERT INTO system_menu (name, permission, type, sort, parent_id, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | SELECT '个ç¨å é¤', 'hrm:tax-rate:delete', 3, 13, 6024, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0' |
| | | FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE permission = 'hrm:tax-rate:delete' AND deleted = b'0'); |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- äºãæäºè§è²ï¼æè§è²åå¹é
ï¼é¿å
ä¸ååº role_id ä¸ä¸è´ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted) |
| | | SELECT r.id, m.id, '1', NOW(), '1', NOW(), b'0' |
| | | FROM system_role r |
| | | JOIN system_menu m ON m.permission IN ( |
| | | 'hrm:attendance:query', |
| | | 'hrm:attendance:export', |
| | | 'hrm:attendance:clock', |
| | | 'hrm:attendance:submit', |
| | | 'hrm:attendance:create', |
| | | 'hrm:attendance:update', |
| | | 'hrm:attendance:delete', |
| | | 'hrm:attendance:calculate', |
| | | 'hrm:leave:export', |
| | | 'hrm:transfer:query', |
| | | 'hrm:transfer:export', |
| | | 'hrm:resignation:query', |
| | | 'hrm:resignation:export', |
| | | 'hrm:overtime:query', |
| | | 'hrm:employee-contract:import', |
| | | 'hrm:salary:query', |
| | | 'hrm:salary:calculate', |
| | | 'hrm:salary:confirm', |
| | | 'hrm:salary:delete', |
| | | 'hrm:salary:export', |
| | | 'hrm:salary-structure:query', |
| | | 'hrm:salary-structure:create', |
| | | 'hrm:salary-structure:update', |
| | | 'hrm:salary-structure:delete', |
| | | 'hrm:salary:generate', |
| | | 'hrm:salary:pay', |
| | | 'hrm:social-security:query', |
| | | 'hrm:social-security:create', |
| | | 'hrm:social-security:update', |
| | | 'hrm:social-security:delete', |
| | | 'hrm:tax-rate:query', |
| | | 'hrm:tax-rate:create', |
| | | 'hrm:tax-rate:update', |
| | | 'hrm:tax-rate:delete', |
| | | -- å工管ç/èå¤/æç/社ä¿/èªé
¬ç页é¢çãé¨é¨ã䏿è°ç¨ /system/dept/listï¼ |
| | | -- 该æ¥å£æ ¡éª system:dept:queryï¼èå 1017ãé¨é¨æ¥è¯¢ãï¼å端èåæ ä¸å±ç¤ºæé®ï¼ä¸ä¼å¤åºèåï¼ |
| | | 'system:dept:query' |
| | | ) |
| | | WHERE r.name = '人èµä¸å' |
| | | AND r.deleted = b'0' |
| | | AND m.deleted = b'0' |
| | | AND NOT EXISTS ( |
| | | SELECT 1 FROM system_role_menu rm |
| | | WHERE rm.role_id = r.id AND rm.menu_id = m.id AND rm.deleted = b'0' |
| | | ); |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ä¸ãæ ¡éªï¼åºè½æ¥åº 34 æ¡ |
| | | -- --------------------------------------------------------------------------- |
| | | -- SELECT m.id, m.name, m.permission, m.parent_id |
| | | -- FROM system_menu m |
| | | -- WHERE m.permission IN ( |
| | | -- 'hrm:attendance:query', |
| | | -- 'hrm:attendance:export', |
| | | -- 'hrm:attendance:clock', |
| | | -- 'hrm:attendance:submit', |
| | | -- 'hrm:attendance:create', |
| | | -- 'hrm:attendance:update', |
| | | -- 'hrm:attendance:delete', |
| | | -- 'hrm:attendance:calculate', |
| | | -- 'hrm:leave:export', |
| | | -- 'hrm:transfer:query', |
| | | -- 'hrm:transfer:export', |
| | | -- 'hrm:resignation:query', |
| | | -- 'hrm:resignation:export', |
| | | -- 'hrm:overtime:query', |
| | | -- 'hrm:employee-contract:import', |
| | | -- 'hrm:salary:query', |
| | | -- 'hrm:salary:calculate', |
| | | -- 'hrm:salary:confirm', |
| | | -- 'hrm:salary:delete', |
| | | -- 'hrm:salary:export', |
| | | -- 'hrm:salary-structure:query', |
| | | -- 'hrm:salary-structure:create', |
| | | -- 'hrm:salary-structure:update', |
| | | -- 'hrm:salary-structure:delete', |
| | | -- 'hrm:salary:generate', |
| | | -- 'hrm:salary:pay', |
| | | -- 'hrm:social-security:query', |
| | | -- 'hrm:social-security:create', |
| | | -- 'hrm:social-security:update', |
| | | -- 'hrm:social-security:delete', |
| | | -- 'hrm:tax-rate:query', |
| | | -- 'hrm:tax-rate:create', |
| | | -- 'hrm:tax-rate:update', |
| | | -- 'hrm:tax-rate:delete' |
| | | -- ) AND m.deleted = b'0' |
| | | -- ORDER BY m.parent_id, m.id; |