-- 修复jwc001用户审批权限问题 -- 创建时间: 2025-01-27 -- 问题: jwc001用户无法访问"部门审批管理"功能,API调用时提示权限不足 -- ===================================================== -- 问题分析 -- ===================================================== -- jwc001用户点击"部门审批管理"页面时,前端调用以下API接口: -- 1. /cw/approval/list (需要 cw:approval:list 权限) ✅ 已有 -- 2. /cw/approval/dept/pending (需要 cw:approval:dept 权限) ❌ 缺失 -- 3. /cw/approval/my (需要 cw:approval:list 权限) ✅ 已有 -- -- 根本原因:jwc001用户的角色缺少 cw:approval:dept 权限 -- ===================================================== -- 第一步:确认当前状态 -- ===================================================== -- 查询jwc001用户信息 SELECT u.user_id, u.user_name, u.nick_name, u.dept_id, d.dept_name FROM sys_user u LEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE u.user_name = 'jwc001'; -- 查询jwc001用户当前角色 SELECT u.user_name, r.role_id, r.role_name, r.role_key FROM sys_user u JOIN sys_user_role ur ON u.user_id = ur.user_id JOIN sys_role r ON ur.role_id = r.role_id WHERE u.user_name = 'jwc001'; -- 查询当前角色拥有的财务审批相关权限 SELECT DISTINCT r.role_name, m.menu_name, m.perms FROM sys_user u JOIN sys_user_role ur ON u.user_id = ur.user_id JOIN sys_role r ON ur.role_id = r.role_id JOIN sys_role_menu rm ON r.role_id = rm.role_id JOIN sys_menu m ON rm.menu_id = m.menu_id WHERE u.user_name = 'jwc001' AND m.perms LIKE 'cw:approval:%' ORDER BY m.perms; -- ===================================================== -- 第二步:查找缺失的权限 -- ===================================================== -- 查找所有财务审批相关的菜单权限 SELECT menu_id, menu_name, perms, parent_id FROM sys_menu WHERE perms LIKE 'cw:approval:%' ORDER BY menu_id; -- 特别检查部门审批权限菜单 SELECT menu_id, menu_name, perms, component FROM sys_menu WHERE perms = 'cw:approval:dept'; -- ===================================================== -- 第三步:修复权限配置 -- ===================================================== -- 方案1:如果部门审批员角色已存在,直接分配权限 -- 查找部门审批员角色 SELECT role_id, role_name, role_key FROM sys_role WHERE role_key = 'dept_approver' OR role_name LIKE '%部门审批%'; -- 如果角色存在,为该角色添加缺失的权限 -- (假设部门审批员角色ID为100,需要根据实际情况调整) INSERT IGNORE INTO sys_role_menu (role_id, menu_id) SELECT r.role_id, m.menu_id FROM sys_role r, sys_menu m WHERE r.role_key = 'dept_approver' AND m.perms = 'cw:approval:dept' AND NOT EXISTS ( SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id ); -- 方案2:如果部门审批员角色不存在,创建角色并分配权限 -- 创建部门审批员角色(如果不存在) INSERT INTO sys_role ( role_id, tenant_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_dept, create_by, create_time, update_by, update_time, remark ) SELECT 100, '000000', '部门审批员', 'dept_approver', 4, '3', 1, 1, '0', '0', 1938484570826956801, 1, NOW(), 1, NOW(), '负责本部门的财务项目申报审批工作' WHERE NOT EXISTS ( SELECT 1 FROM sys_role WHERE role_key = 'dept_approver' ); -- 为部门审批员角色分配必要的菜单权限 INSERT IGNORE INTO sys_role_menu (role_id, menu_id) SELECT 100, menu_id FROM sys_menu WHERE perms IN ( 'cw:approval:list', -- 查询审批记录列表 'cw:approval:query', -- 查询审批记录详情 'cw:approval:dept', -- 部门审批权限 'cw:approval:export' -- 导出审批记录 ); -- 为部门审批员角色分配财务管理相关的父级菜单权限 INSERT IGNORE INTO sys_role_menu (role_id, menu_id) SELECT 100, menu_id FROM sys_menu WHERE menu_id IN ( 6000, -- 财务管理(如果存在) 6100, -- 财务项目申报管理(如果存在) 6200 -- 部门审批管理(如果存在) ); -- 确保jwc001用户拥有部门审批员角色 INSERT IGNORE INTO sys_user_role (user_id, role_id) SELECT u.user_id, 100 FROM sys_user u WHERE u.user_name = 'jwc001' AND NOT EXISTS ( SELECT 1 FROM sys_user_role ur WHERE ur.user_id = u.user_id AND ur.role_id = 100 ); -- ===================================================== -- 第四步:验证修复结果 -- ===================================================== -- 验证jwc001用户最终的权限配置 SELECT u.user_name AS '用户名', r.role_name AS '角色名', m.menu_name AS '菜单名', m.perms AS '权限码' FROM sys_user u JOIN sys_user_role ur ON u.user_id = ur.user_id JOIN sys_role r ON ur.role_id = r.role_id JOIN sys_role_menu rm ON r.role_id = rm.role_id JOIN sys_menu m ON rm.menu_id = m.menu_id WHERE u.user_name = 'jwc001' AND m.perms LIKE 'cw:approval:%' ORDER BY m.perms; -- 特别验证部门审批权限 SELECT COUNT(*) AS '是否有部门审批权限', CASE WHEN COUNT(*) > 0 THEN '✅ 权限配置正确' ELSE '❌ 权限配置缺失' END AS '配置状态' FROM sys_user u JOIN sys_user_role ur ON u.user_id = ur.user_id JOIN sys_role r ON ur.role_id = r.role_id JOIN sys_role_menu rm ON r.role_id = rm.role_id JOIN sys_menu m ON rm.menu_id = m.menu_id WHERE u.user_name = 'jwc001' AND m.perms = 'cw:approval:dept'; COMMIT; -- ===================================================== -- 预期结果 -- ===================================================== -- 1. jwc001用户获得完整的部门审批权限 -- 2. 能够正常访问 /cw/approval/dept/pending 接口 -- 3. "部门审批管理"页面加载正常,不再报权限错误 -- 4. 可以查看待审批和已审批记录