172 lines
7.8 KiB
SQL
172 lines
7.8 KiB
SQL
-- ==========================================
|
|
-- 维修人员权限修复脚本
|
|
-- 功能:确保维修人员角色正确配置,能正确过滤只查看自己相关的订单
|
|
-- 时间: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; |