fix-maintenance-worker-permissions.sql 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. -- ==========================================
  2. -- 维修人员权限修复脚本
  3. -- 功能:确保维修人员角色正确配置,能正确过滤只查看自己相关的订单
  4. -- 时间:2025-06-30 18:45:00
  5. -- 说明:使用UPSERT逻辑,支持重复执行
  6. -- ==========================================
  7. -- 第一步:创建维修人员和管理员角色(如果不存在)
  8. INSERT INTO sys_role (
  9. role_id, role_name, role_key, role_sort, data_scope,
  10. menu_check_strictly, dept_check_strictly, status,
  11. del_flag, create_by, create_time, update_by, update_time, remark
  12. )
  13. SELECT
  14. 5, '维修人员', 'maintenance_worker', 5, '5',
  15. 1, 1, '0',
  16. '0', 1, now(), 1, now(), '负责具体维修工作的人员,只能查看和处理分配给自己的维修工单或自己创建的工单'
  17. WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_id = 5);
  18. INSERT INTO sys_role (
  19. role_id, role_name, role_key, role_sort, data_scope,
  20. menu_check_strictly, dept_check_strictly, status,
  21. del_flag, create_by, create_time, update_by, update_time, remark
  22. )
  23. SELECT
  24. 6, '物业维修管理员', 'property_maintenance_admin', 6, '3',
  25. 1, 1, '0',
  26. '0', 1, now(), 1, now(), '负责物业维修管理工作,可以管理所有维修工单、分配维修任务、查看维修统计'
  27. WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_id = 6);
  28. -- 第二步:确保维修人员角色有基础菜单权限
  29. -- 为维修人员分配物业管理主菜单权限
  30. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  31. SELECT 5, menu_id FROM sys_menu WHERE menu_id = 2100; -- 物业管理主菜单
  32. -- 为维修人员分配报修管理子菜单权限
  33. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  34. SELECT 5, menu_id FROM sys_menu WHERE menu_id = 2110; -- 报修管理菜单
  35. -- 为维修人员分配基础功能权限
  36. INSERT IGNORE INTO sys_role_menu (role_id, menu_id) VALUES
  37. (5, 2111), -- 查询权限
  38. (5, 2113), -- 修改权限
  39. (5, 2117), -- 开始维修权限
  40. (5, 2118), -- 完成维修权限
  41. (5, 2120); -- 生成工单编号权限
  42. -- 第三步:为物业维修管理员分配完整权限
  43. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  44. SELECT 6, menu_id FROM sys_menu WHERE menu_id BETWEEN 2100 AND 2199;
  45. -- 第四步:创建测试用户(如果不存在)
  46. -- 创建一个专门的维修人员测试账号
  47. INSERT INTO sys_user (
  48. user_id, user_name, nick_name, email, phone, sex, avatar, password, status,
  49. del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark
  50. )
  51. SELECT
  52. 999, 'maintenance_test', '测试维修员', 'maintenance@test.com', '13800000001', '0', '',
  53. '$2a$10$7JB720yubVSOnlhHOY5aDuAEaG9MXOAG7Ap3CfvzDuR8YYnQbmLqK', -- 密码:admin123
  54. '0', '0', '', now(), 1, now(), 1, now(), '维修人员权限测试账号'
  55. WHERE NOT EXISTS (SELECT 1 FROM sys_user WHERE user_id = 999);
  56. -- 创建一个物业管理员测试账号
  57. INSERT INTO sys_user (
  58. user_id, user_name, nick_name, email, phone, sex, avatar, password, status,
  59. del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark
  60. )
  61. SELECT
  62. 998, 'property_admin_test', '测试物业管理员', 'property@test.com', '13800000002', '0', '',
  63. '$2a$10$7JB720yubVSOnlhHOY5aDuAEaG9MXOAG7Ap3CfvzDuR8YYnQbmLqK', -- 密码:admin123
  64. '0', '0', '', now(), 1, now(), 1, now(), '物业管理员权限测试账号'
  65. WHERE NOT EXISTS (SELECT 1 FROM sys_user WHERE user_id = 998);
  66. -- 第五步:为测试用户分配角色
  67. INSERT IGNORE INTO sys_user_role (user_id, role_id) VALUES
  68. (999, 5), -- 测试维修员 -> 维修人员角色
  69. (998, 6); -- 测试物业管理员 -> 物业维修管理员角色
  70. -- 第六步:为现有总务处用户分配维修人员角色(如果用户存在)
  71. INSERT IGNORE INTO sys_user_role (user_id, role_id)
  72. SELECT user_id, 5 FROM sys_user
  73. WHERE user_name IN ('zwc005', 'zwc007') AND user_id IS NOT NULL;
  74. -- 为现有总务处用户分配物业管理员角色(如果用户存在)
  75. INSERT IGNORE INTO sys_user_role (user_id, role_id)
  76. SELECT user_id, 6 FROM sys_user
  77. WHERE user_name IN ('zwc003', 'zwc004') AND user_id IS NOT NULL;
  78. -- 第七步:创建测试数据 - 创建一些报修订单用于测试权限
  79. -- 为测试维修员创建的报修订单
  80. INSERT INTO pm_repair_order (
  81. id, order_no, title, description, repair_location, category_id, priority_level,
  82. reporter_id, reporter_name, reporter_phone, order_status, assignee_id, assignee_name,
  83. attachment_count, progress_count, create_by, create_time, update_by, update_time,
  84. tenant_id, create_dept, deleted
  85. )
  86. SELECT
  87. 9901, 'RO20251230001', '测试报修-维修员自己创建', '这是维修员自己创建的报修订单,用于测试权限',
  88. '测试楼101室', 1, 2, 999, '测试维修员', '13800000001', '1', NULL, NULL,
  89. 0, 0, 999, now(), 999, now(), '000000', 103, 0
  90. WHERE NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE id = 9901);
  91. -- 分配给测试维修员的报修订单
  92. INSERT INTO pm_repair_order (
  93. id, order_no, title, description, repair_location, category_id, priority_level,
  94. reporter_id, reporter_name, reporter_phone, order_status, assignee_id, assignee_name,
  95. attachment_count, progress_count, create_by, create_time, update_by, update_time,
  96. tenant_id, create_dept, deleted
  97. )
  98. SELECT
  99. 9902, 'RO20251230002', '测试报修-分配给维修员', '这是分配给维修员的报修订单,用于测试权限',
  100. '测试楼102室', 1, 3, 1, '管理员', '13900000000', '2', 999, '测试维修员',
  101. 0, 0, 1, now(), 1, now(), '000000', 103, 0
  102. WHERE NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE id = 9902);
  103. -- 其他用户创建的报修订单(维修员不应该看到)
  104. INSERT INTO pm_repair_order (
  105. id, order_no, title, description, repair_location, category_id, priority_level,
  106. reporter_id, reporter_name, reporter_phone, order_status, assignee_id, assignee_name,
  107. attachment_count, progress_count, create_by, create_time, update_by, update_time,
  108. tenant_id, create_dept, deleted
  109. )
  110. SELECT
  111. 9903, 'RO20251230003', '测试报修-其他用户创建', '这是其他用户创建的报修订单,维修员不应该看到',
  112. '测试楼103室', 1, 1, 998, '测试物业管理员', '13800000002', '1', NULL, NULL,
  113. 0, 0, 998, now(), 998, now(), '000000', 103, 0
  114. WHERE NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE id = 9903);
  115. -- 第八步:验证配置结果
  116. SELECT '=== 角色配置验证 ===' as section;
  117. SELECT
  118. role_id, role_name, role_key, status, remark
  119. FROM sys_role
  120. WHERE role_id IN (5, 6)
  121. ORDER BY role_id;
  122. SELECT '=== 用户角色分配验证 ===' as section;
  123. SELECT
  124. u.user_id, u.user_name, u.nick_name, r.role_name, r.role_key
  125. FROM sys_user_role ur
  126. JOIN sys_user u ON ur.user_id = u.user_id
  127. JOIN sys_role r ON ur.role_id = r.role_id
  128. WHERE ur.role_id IN (5, 6)
  129. ORDER BY ur.role_id, u.user_id;
  130. SELECT '=== 维修人员权限验证 ===' as section;
  131. SELECT
  132. COUNT(*) as menu_permission_count
  133. FROM sys_role_menu
  134. WHERE role_id = 5;
  135. SELECT '=== 测试数据验证 ===' as section;
  136. SELECT
  137. id, order_no, title, reporter_id, reporter_name, assignee_id, assignee_name, order_status
  138. FROM pm_repair_order
  139. WHERE id BETWEEN 9901 AND 9903
  140. ORDER BY id;
  141. -- 第九步:权限测试说明
  142. SELECT '=== 权限测试说明 ===' as section;
  143. SELECT
  144. '1. 使用maintenance_test账号登录,应该只能看到自己创建(9901)和分配给自己(9902)的工单' as test_case_1,
  145. '2. 使用property_admin_test账号登录,应该能看到所有工单(9901,9902,9903)' as test_case_2,
  146. '3. 使用admin账号登录,作为超级管理员应该能看到所有工单' as test_case_3;
  147. -- 第十步:完成提示
  148. SELECT
  149. '权限修复完成' as status,
  150. 'maintenance_test / admin123 - 维修人员测试账号' as test_account_1,
  151. 'property_admin_test / admin123 - 物业管理员测试账号' as test_account_2,
  152. '请使用这些账号测试权限是否正确' as next_step;