fix-jwc001-approval-permissions.sql 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. -- 修复jwc001用户审批权限问题
  2. -- 创建时间: 2025-01-27
  3. -- 问题: jwc001用户无法访问"部门审批管理"功能,API调用时提示权限不足
  4. -- =====================================================
  5. -- 问题分析
  6. -- =====================================================
  7. -- jwc001用户点击"部门审批管理"页面时,前端调用以下API接口:
  8. -- 1. /cw/approval/list (需要 cw:approval:list 权限) ✅ 已有
  9. -- 2. /cw/approval/dept/pending (需要 cw:approval:dept 权限) ❌ 缺失
  10. -- 3. /cw/approval/my (需要 cw:approval:list 权限) ✅ 已有
  11. --
  12. -- 根本原因:jwc001用户的角色缺少 cw:approval:dept 权限
  13. -- =====================================================
  14. -- 第一步:确认当前状态
  15. -- =====================================================
  16. -- 查询jwc001用户信息
  17. SELECT
  18. u.user_id,
  19. u.user_name,
  20. u.nick_name,
  21. u.dept_id,
  22. d.dept_name
  23. FROM sys_user u
  24. LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
  25. WHERE u.user_name = 'jwc001';
  26. -- 查询jwc001用户当前角色
  27. SELECT
  28. u.user_name,
  29. r.role_id,
  30. r.role_name,
  31. r.role_key
  32. FROM sys_user u
  33. JOIN sys_user_role ur ON u.user_id = ur.user_id
  34. JOIN sys_role r ON ur.role_id = r.role_id
  35. WHERE u.user_name = 'jwc001';
  36. -- 查询当前角色拥有的财务审批相关权限
  37. SELECT DISTINCT
  38. r.role_name,
  39. m.menu_name,
  40. m.perms
  41. FROM sys_user u
  42. JOIN sys_user_role ur ON u.user_id = ur.user_id
  43. JOIN sys_role r ON ur.role_id = r.role_id
  44. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  45. JOIN sys_menu m ON rm.menu_id = m.menu_id
  46. WHERE u.user_name = 'jwc001'
  47. AND m.perms LIKE 'cw:approval:%'
  48. ORDER BY m.perms;
  49. -- =====================================================
  50. -- 第二步:查找缺失的权限
  51. -- =====================================================
  52. -- 查找所有财务审批相关的菜单权限
  53. SELECT
  54. menu_id,
  55. menu_name,
  56. perms,
  57. parent_id
  58. FROM sys_menu
  59. WHERE perms LIKE 'cw:approval:%'
  60. ORDER BY menu_id;
  61. -- 特别检查部门审批权限菜单
  62. SELECT
  63. menu_id,
  64. menu_name,
  65. perms,
  66. component
  67. FROM sys_menu
  68. WHERE perms = 'cw:approval:dept';
  69. -- =====================================================
  70. -- 第三步:修复权限配置
  71. -- =====================================================
  72. -- 方案1:如果部门审批员角色已存在,直接分配权限
  73. -- 查找部门审批员角色
  74. SELECT role_id, role_name, role_key
  75. FROM sys_role
  76. WHERE role_key = 'dept_approver' OR role_name LIKE '%部门审批%';
  77. -- 如果角色存在,为该角色添加缺失的权限
  78. -- (假设部门审批员角色ID为100,需要根据实际情况调整)
  79. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  80. SELECT r.role_id, m.menu_id
  81. FROM sys_role r, sys_menu m
  82. WHERE r.role_key = 'dept_approver'
  83. AND m.perms = 'cw:approval:dept'
  84. AND NOT EXISTS (
  85. SELECT 1 FROM sys_role_menu rm
  86. WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id
  87. );
  88. -- 方案2:如果部门审批员角色不存在,创建角色并分配权限
  89. -- 创建部门审批员角色(如果不存在)
  90. INSERT INTO sys_role (
  91. role_id, tenant_id, role_name, role_key, role_sort,
  92. data_scope, menu_check_strictly, dept_check_strictly,
  93. status, del_flag, create_dept, create_by, create_time,
  94. update_by, update_time, remark
  95. )
  96. SELECT
  97. 100, '000000', '部门审批员', 'dept_approver', 4,
  98. '3', 1, 1, '0', '0', 1938484570826956801, 1, NOW(),
  99. 1, NOW(), '负责本部门的财务项目申报审批工作'
  100. WHERE NOT EXISTS (
  101. SELECT 1 FROM sys_role WHERE role_key = 'dept_approver'
  102. );
  103. -- 为部门审批员角色分配必要的菜单权限
  104. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  105. SELECT 100, menu_id FROM sys_menu WHERE perms IN (
  106. 'cw:approval:list', -- 查询审批记录列表
  107. 'cw:approval:query', -- 查询审批记录详情
  108. 'cw:approval:dept', -- 部门审批权限
  109. 'cw:approval:export' -- 导出审批记录
  110. );
  111. -- 为部门审批员角色分配财务管理相关的父级菜单权限
  112. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  113. SELECT 100, menu_id FROM sys_menu WHERE menu_id IN (
  114. 6000, -- 财务管理(如果存在)
  115. 6100, -- 财务项目申报管理(如果存在)
  116. 6200 -- 部门审批管理(如果存在)
  117. );
  118. -- 确保jwc001用户拥有部门审批员角色
  119. INSERT IGNORE INTO sys_user_role (user_id, role_id)
  120. SELECT u.user_id, 100
  121. FROM sys_user u
  122. WHERE u.user_name = 'jwc001'
  123. AND NOT EXISTS (
  124. SELECT 1 FROM sys_user_role ur
  125. WHERE ur.user_id = u.user_id AND ur.role_id = 100
  126. );
  127. -- =====================================================
  128. -- 第四步:验证修复结果
  129. -- =====================================================
  130. -- 验证jwc001用户最终的权限配置
  131. SELECT
  132. u.user_name AS '用户名',
  133. r.role_name AS '角色名',
  134. m.menu_name AS '菜单名',
  135. m.perms AS '权限码'
  136. FROM sys_user u
  137. JOIN sys_user_role ur ON u.user_id = ur.user_id
  138. JOIN sys_role r ON ur.role_id = r.role_id
  139. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  140. JOIN sys_menu m ON rm.menu_id = m.menu_id
  141. WHERE u.user_name = 'jwc001'
  142. AND m.perms LIKE 'cw:approval:%'
  143. ORDER BY m.perms;
  144. -- 特别验证部门审批权限
  145. SELECT
  146. COUNT(*) AS '是否有部门审批权限',
  147. CASE
  148. WHEN COUNT(*) > 0 THEN '✅ 权限配置正确'
  149. ELSE '❌ 权限配置缺失'
  150. END AS '配置状态'
  151. FROM sys_user u
  152. JOIN sys_user_role ur ON u.user_id = ur.user_id
  153. JOIN sys_role r ON ur.role_id = r.role_id
  154. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  155. JOIN sys_menu m ON rm.menu_id = m.menu_id
  156. WHERE u.user_name = 'jwc001'
  157. AND m.perms = 'cw:approval:dept';
  158. COMMIT;
  159. -- =====================================================
  160. -- 预期结果
  161. -- =====================================================
  162. -- 1. jwc001用户获得完整的部门审批权限
  163. -- 2. 能够正常访问 /cw/approval/dept/pending 接口
  164. -- 3. "部门审批管理"页面加载正常,不再报权限错误
  165. -- 4. 可以查看待审批和已审批记录