| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- -- ==========================================
- -- 维修人员权限修复脚本
- -- 功能:确保维修人员角色正确配置,能正确过滤只查看自己相关的订单
- -- 时间:2025-06-30 18:45:00
- -- 说明:使用UPSERT逻辑,支持重复执行
- -- ==========================================
- -- 第一步:创建维修人员和管理员角色(如果不存在)
- INSERT INTO sys_role (
- role_id, role_name, role_key, role_sort, data_scope,
- menu_check_strictly, dept_check_strictly, status,
- del_flag, create_by, create_time, update_by, update_time, remark
- )
- SELECT
- 5, '维修人员', 'maintenance_worker', 5, '5',
- 1, 1, '0',
- '0', 1, now(), 1, now(), '负责具体维修工作的人员,只能查看和处理分配给自己的维修工单或自己创建的工单'
- WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_id = 5);
- INSERT INTO sys_role (
- role_id, role_name, role_key, role_sort, data_scope,
- menu_check_strictly, dept_check_strictly, status,
- del_flag, create_by, create_time, update_by, update_time, remark
- )
- SELECT
- 6, '物业维修管理员', 'property_maintenance_admin', 6, '3',
- 1, 1, '0',
- '0', 1, now(), 1, now(), '负责物业维修管理工作,可以管理所有维修工单、分配维修任务、查看维修统计'
- WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_id = 6);
- -- 第二步:确保维修人员角色有基础菜单权限
- -- 为维修人员分配物业管理主菜单权限
- INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
- SELECT 5, menu_id FROM sys_menu WHERE menu_id = 2100; -- 物业管理主菜单
- -- 为维修人员分配报修管理子菜单权限
- INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
- SELECT 5, menu_id FROM sys_menu WHERE menu_id = 2110; -- 报修管理菜单
- -- 为维修人员分配基础功能权限
- INSERT IGNORE INTO sys_role_menu (role_id, menu_id) VALUES
- (5, 2111), -- 查询权限
- (5, 2113), -- 修改权限
- (5, 2117), -- 开始维修权限
- (5, 2118), -- 完成维修权限
- (5, 2120); -- 生成工单编号权限
- -- 第三步:为物业维修管理员分配完整权限
- INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
- SELECT 6, menu_id FROM sys_menu WHERE menu_id BETWEEN 2100 AND 2199;
- -- 第四步:创建测试用户(如果不存在)
- -- 创建一个专门的维修人员测试账号
- INSERT INTO sys_user (
- user_id, user_name, nick_name, email, phone, sex, avatar, password, status,
- del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark
- )
- SELECT
- 999, 'maintenance_test', '测试维修员', 'maintenance@test.com', '13800000001', '0', '',
- '$2a$10$7JB720yubVSOnlhHOY5aDuAEaG9MXOAG7Ap3CfvzDuR8YYnQbmLqK', -- 密码:admin123
- '0', '0', '', now(), 1, now(), 1, now(), '维修人员权限测试账号'
- WHERE NOT EXISTS (SELECT 1 FROM sys_user WHERE user_id = 999);
- -- 创建一个物业管理员测试账号
- INSERT INTO sys_user (
- user_id, user_name, nick_name, email, phone, sex, avatar, password, status,
- del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark
- )
- SELECT
- 998, 'property_admin_test', '测试物业管理员', 'property@test.com', '13800000002', '0', '',
- '$2a$10$7JB720yubVSOnlhHOY5aDuAEaG9MXOAG7Ap3CfvzDuR8YYnQbmLqK', -- 密码:admin123
- '0', '0', '', now(), 1, now(), 1, now(), '物业管理员权限测试账号'
- WHERE NOT EXISTS (SELECT 1 FROM sys_user WHERE user_id = 998);
- -- 第五步:为测试用户分配角色
- INSERT IGNORE INTO sys_user_role (user_id, role_id) VALUES
- (999, 5), -- 测试维修员 -> 维修人员角色
- (998, 6); -- 测试物业管理员 -> 物业维修管理员角色
- -- 第六步:为现有总务处用户分配维修人员角色(如果用户存在)
- INSERT IGNORE INTO sys_user_role (user_id, role_id)
- SELECT user_id, 5 FROM sys_user
- WHERE user_name IN ('zwc005', 'zwc007') AND user_id IS NOT NULL;
- -- 为现有总务处用户分配物业管理员角色(如果用户存在)
- INSERT IGNORE INTO sys_user_role (user_id, role_id)
- SELECT user_id, 6 FROM sys_user
- WHERE user_name IN ('zwc003', 'zwc004') AND user_id IS NOT NULL;
- -- 第七步:创建测试数据 - 创建一些报修订单用于测试权限
- -- 为测试维修员创建的报修订单
- INSERT INTO pm_repair_order (
- id, order_no, title, description, repair_location, category_id, priority_level,
- reporter_id, reporter_name, reporter_phone, order_status, assignee_id, assignee_name,
- attachment_count, progress_count, create_by, create_time, update_by, update_time,
- tenant_id, create_dept, deleted
- )
- SELECT
- 9901, 'RO20251230001', '测试报修-维修员自己创建', '这是维修员自己创建的报修订单,用于测试权限',
- '测试楼101室', 1, 2, 999, '测试维修员', '13800000001', '1', NULL, NULL,
- 0, 0, 999, now(), 999, now(), '000000', 103, 0
- WHERE NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE id = 9901);
- -- 分配给测试维修员的报修订单
- INSERT INTO pm_repair_order (
- id, order_no, title, description, repair_location, category_id, priority_level,
- reporter_id, reporter_name, reporter_phone, order_status, assignee_id, assignee_name,
- attachment_count, progress_count, create_by, create_time, update_by, update_time,
- tenant_id, create_dept, deleted
- )
- SELECT
- 9902, 'RO20251230002', '测试报修-分配给维修员', '这是分配给维修员的报修订单,用于测试权限',
- '测试楼102室', 1, 3, 1, '管理员', '13900000000', '2', 999, '测试维修员',
- 0, 0, 1, now(), 1, now(), '000000', 103, 0
- WHERE NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE id = 9902);
- -- 其他用户创建的报修订单(维修员不应该看到)
- INSERT INTO pm_repair_order (
- id, order_no, title, description, repair_location, category_id, priority_level,
- reporter_id, reporter_name, reporter_phone, order_status, assignee_id, assignee_name,
- attachment_count, progress_count, create_by, create_time, update_by, update_time,
- tenant_id, create_dept, deleted
- )
- SELECT
- 9903, 'RO20251230003', '测试报修-其他用户创建', '这是其他用户创建的报修订单,维修员不应该看到',
- '测试楼103室', 1, 1, 998, '测试物业管理员', '13800000002', '1', NULL, NULL,
- 0, 0, 998, now(), 998, now(), '000000', 103, 0
- WHERE NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE id = 9903);
- -- 第八步:验证配置结果
- SELECT '=== 角色配置验证 ===' as section;
- SELECT
- role_id, role_name, role_key, status, remark
- FROM sys_role
- WHERE role_id IN (5, 6)
- ORDER BY role_id;
- SELECT '=== 用户角色分配验证 ===' as section;
- SELECT
- u.user_id, u.user_name, u.nick_name, r.role_name, r.role_key
- FROM sys_user_role ur
- JOIN sys_user u ON ur.user_id = u.user_id
- JOIN sys_role r ON ur.role_id = r.role_id
- WHERE ur.role_id IN (5, 6)
- ORDER BY ur.role_id, u.user_id;
- SELECT '=== 维修人员权限验证 ===' as section;
- SELECT
- COUNT(*) as menu_permission_count
- FROM sys_role_menu
- WHERE role_id = 5;
- SELECT '=== 测试数据验证 ===' as section;
- SELECT
- id, order_no, title, reporter_id, reporter_name, assignee_id, assignee_name, order_status
- FROM pm_repair_order
- WHERE id BETWEEN 9901 AND 9903
- ORDER BY id;
- -- 第九步:权限测试说明
- SELECT '=== 权限测试说明 ===' as section;
- SELECT
- '1. 使用maintenance_test账号登录,应该只能看到自己创建(9901)和分配给自己(9902)的工单' as test_case_1,
- '2. 使用property_admin_test账号登录,应该能看到所有工单(9901,9902,9903)' as test_case_2,
- '3. 使用admin账号登录,作为超级管理员应该能看到所有工单' as test_case_3;
- -- 第十步:完成提示
- SELECT
- '权限修复完成' as status,
- 'maintenance_test / admin123 - 维修人员测试账号' as test_account_1,
- 'property_admin_test / admin123 - 物业管理员测试账号' as test_account_2,
- '请使用这些账号测试权限是否正确' as next_step;
|