From 0100e530e07f11a98f25292a625f6fe0a9f20db6 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期五, 30 十月 2026 10:49:46 +0800 Subject: [PATCH] fix(hrm): 补齐 HRM 后端校验的权限码菜单脚本 --- sql/mysql/hrm_permission_code_align.sql | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 253 insertions(+), 0 deletions(-) diff --git a/sql/mysql/hrm_permission_code_align.sql b/sql/mysql/hrm_permission_code_align.sql new file mode 100644 index 0000000..928929f --- /dev/null +++ b/sql/mysql/hrm_permission_code_align.sql @@ -0,0 +1,253 @@ +-- ============================================================================ +-- HRM 鏉冮檺鐮佸榻愶細琛ラ綈鍚庣 @PreAuthorize 瀹為檯鏍¢獙鐨勬潈闄愮爜鑿滃崟锛屽苟鎺堜簣銆屼汉璧勪笓鍛樸�� +-- +-- 闂锛�2026-08-12 鐢熶骇搴撴妸 system_menu 閲� HRM 鎸夐挳鐨勬潈闄愮爜鏀规垚浜嗗墠绔粏绮掑害鐮� +-- 锛坔rm:attendance-holiday:query銆乭rm:salary-calculation:calculate 绛夛級锛� +-- 浣嗗悗绔� Controller 鏍¢獙鐨勬槸绮楃矑搴︾爜锛坔rm:attendance:query銆乭rm: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 '鎵撳崱锛堟帴鍙o級', '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 '鑰冨嫟缁熻鐢熸垚锛堟帴鍙o級', '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 '鍙戞斁锛堟帴鍙o級', '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锛� + -- 璇ユ帴鍙f牎楠� 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; -- Gitblit v1.9.3