fix_朱茏_学籍异动新增权限.sql 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. -- ============================================================
  2. -- 临时权限修复:学籍异动「新增」权限(退学/休学/复学/毕业提交接口)
  3. -- 背景:
  4. -- 前端退学按钮权限:studentMsg:status:tuixue
  5. -- 后端提交接口校验:studentMsg:studentStatusChange:add
  6. -- 系统菜单中原先缺少 add 权限码,导致有按钮但提交报 403
  7. -- 适用:
  8. -- 朱茏老师(user_id=223,角色含 3003-学生信息管理)及同类角色
  9. -- 执行后:
  10. -- 相关用户需重新登录,使权限缓存生效
  11. -- ============================================================
  12. -- ------------------------------------------------------------
  13. -- 0) 修改前备份相关表(带时间戳后缀,避免覆盖)
  14. -- ------------------------------------------------------------
  15. SET @bak_suffix = DATE_FORMAT(NOW(), '%Y%m%d_%H%i%s');
  16. SET @sql_bak_menu = CONCAT(
  17. 'CREATE TABLE IF NOT EXISTS sys_menu_bak_', @bak_suffix,
  18. ' AS SELECT * FROM sys_menu'
  19. );
  20. PREPARE stmt_bak_menu FROM @sql_bak_menu;
  21. EXECUTE stmt_bak_menu;
  22. DEALLOCATE PREPARE stmt_bak_menu;
  23. SET @sql_bak_role_menu = CONCAT(
  24. 'CREATE TABLE IF NOT EXISTS sys_role_menu_bak_', @bak_suffix,
  25. ' AS SELECT * FROM sys_role_menu'
  26. );
  27. PREPARE stmt_bak_role_menu FROM @sql_bak_role_menu;
  28. EXECUTE stmt_bak_role_menu;
  29. DEALLOCATE PREPARE stmt_bak_role_menu;
  30. -- 查看本次备份表名
  31. SELECT
  32. CONCAT('sys_menu_bak_', @bak_suffix) AS menu_backup_table,
  33. CONCAT('sys_role_menu_bak_', @bak_suffix) AS role_menu_backup_table;
  34. -- ------------------------------------------------------------
  35. -- 1) 新增「学籍异动-新增」按钮权限(挂在「学籍异动信息」菜单下)
  36. -- ------------------------------------------------------------
  37. INSERT INTO sys_menu (
  38. menu_id, menu_name, parent_id, order_num, path, component, query_param,
  39. is_frame, is_cache, menu_type, visible, status, perms, icon,
  40. create_dept, create_by, create_time, update_by, update_time, remark
  41. )
  42. SELECT
  43. 2005461500000000001,
  44. '新增',
  45. 2004197349643042818, -- 学籍异动信息
  46. 0,
  47. '',
  48. NULL,
  49. NULL,
  50. 1,
  51. 0,
  52. 'F',
  53. '0',
  54. '0',
  55. 'studentMsg:studentStatusChange:add',
  56. '',
  57. 100,
  58. 1,
  59. NOW(),
  60. 1,
  61. NOW(),
  62. '补齐学籍异动提交接口权限,解决退学/休学等提交403'
  63. FROM DUAL
  64. WHERE NOT EXISTS (
  65. SELECT 1 FROM sys_menu WHERE perms = 'studentMsg:studentStatusChange:add'
  66. );
  67. -- 若库中已用其他 menu_id 创建了同名 perms,下面授权统一按 perms 查找 menu_id
  68. -- ------------------------------------------------------------
  69. -- 2) 给「学生信息管理(保留)」角色(3003)授权(朱茏已拥有该角色)
  70. -- ------------------------------------------------------------
  71. INSERT INTO sys_role_menu (role_id, menu_id)
  72. SELECT 3003, m.menu_id
  73. FROM sys_menu m
  74. WHERE m.perms = 'studentMsg:studentStatusChange:add'
  75. AND NOT EXISTS (
  76. SELECT 1 FROM sys_role_menu rm
  77. WHERE rm.role_id = 3003 AND rm.menu_id = m.menu_id
  78. );
  79. -- ------------------------------------------------------------
  80. -- 3) 兼容:所有已拥有「退学」按钮权限的角色,一并补上 add
  81. -- ------------------------------------------------------------
  82. INSERT INTO sys_role_menu (role_id, menu_id)
  83. SELECT DISTINCT rm.role_id, add_menu.menu_id
  84. FROM sys_role_menu rm
  85. JOIN sys_menu tuixue ON tuixue.menu_id = rm.menu_id AND tuixue.perms = 'studentMsg:status:tuixue'
  86. JOIN sys_menu add_menu ON add_menu.perms = 'studentMsg:studentStatusChange:add'
  87. WHERE NOT EXISTS (
  88. SELECT 1 FROM sys_role_menu x
  89. WHERE x.role_id = rm.role_id AND x.menu_id = add_menu.menu_id
  90. );
  91. -- ------------------------------------------------------------
  92. -- 4) 校验:朱茏是否已具备 add 权限
  93. -- ------------------------------------------------------------
  94. SELECT
  95. u.user_id,
  96. u.user_name,
  97. u.nick_name,
  98. r.role_id,
  99. r.role_name,
  100. m.perms,
  101. m.menu_name
  102. FROM sys_user u
  103. JOIN sys_user_role ur ON ur.user_id = u.user_id
  104. JOIN sys_role r ON r.role_id = ur.role_id
  105. JOIN sys_role_menu rm ON rm.role_id = r.role_id
  106. JOIN sys_menu m ON m.menu_id = rm.menu_id
  107. WHERE u.user_id = 223
  108. AND m.perms IN (
  109. 'studentMsg:status:tuixue',
  110. 'studentMsg:studentStatusChange:add',
  111. 'studentMsg:studentStatusChange:list'
  112. )
  113. ORDER BY m.perms, r.role_id;
  114. -- ------------------------------------------------------------
  115. -- 回滚示例(按需执行,把后缀换成上面查出的备份表名)
  116. -- ------------------------------------------------------------
  117. -- TRUNCATE TABLE sys_role_menu;
  118. -- INSERT INTO sys_role_menu SELECT * FROM sys_role_menu_bak_YYYYMMDD_HHMMSS;
  119. -- DELETE FROM sys_menu WHERE perms = 'studentMsg:studentStatusChange:add';
  120. -- -- 或整表回滚菜单:
  121. -- -- TRUNCATE TABLE sys_menu;
  122. -- -- INSERT INTO sys_menu SELECT * FROM sys_menu_bak_YYYYMMDD_HHMMSS;