| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- -- ============================================================
- -- 临时权限修复:换班级「新增」权限(学生信息页提交换班级接口)
- -- 背景:
- -- 前端换班级按钮权限:studentMsg:class:change
- -- 后端提交接口校验:studentMsg:studentClassChange:add
- -- 有按钮但提交报 403 Forbidden(无访问权限)
- -- 适用:
- -- 朱茏老师(user_id=223,角色含 3003-学生信息管理)及同类角色
- -- 执行后:
- -- 相关用户需重新登录,使权限缓存生效
- -- ============================================================
- -- ------------------------------------------------------------
- -- A) 先查:朱茏是否已具备 add / 前端按钮权限(只读,可单独执行)
- -- ------------------------------------------------------------
- SELECT
- u.user_id,
- u.user_name,
- u.nick_name,
- r.role_id,
- r.role_name,
- m.menu_id,
- m.menu_name,
- m.perms
- FROM sys_user u
- JOIN sys_user_role ur ON ur.user_id = u.user_id
- JOIN sys_role r ON r.role_id = ur.role_id
- JOIN sys_role_menu rm ON rm.role_id = r.role_id
- JOIN sys_menu m ON m.menu_id = rm.menu_id
- WHERE u.user_id = 223
- AND m.perms IN (
- 'studentMsg:class:change',
- 'studentMsg:studentClassChange:add',
- 'studentMsg:studentClassChange:list',
- 'studentMsg:studentClassChange:query',
- 'studentMsg:studentClassChange:edit',
- 'studentMsg:studentClassChange:remove',
- 'studentMsg:studentClassChange:export'
- )
- ORDER BY m.perms, r.role_id;
- -- 汇总:是否具备关键权限(有行=有,无行=没有)
- SELECT
- 'studentMsg:class:change' AS perms,
- EXISTS (
- SELECT 1
- FROM sys_user_role ur
- JOIN sys_role_menu rm ON rm.role_id = ur.role_id
- JOIN sys_menu m ON m.menu_id = rm.menu_id
- WHERE ur.user_id = 223 AND m.perms = 'studentMsg:class:change'
- ) AS has_perm
- UNION ALL
- SELECT
- 'studentMsg:studentClassChange:add',
- EXISTS (
- SELECT 1
- FROM sys_user_role ur
- JOIN sys_role_menu rm ON rm.role_id = ur.role_id
- JOIN sys_menu m ON m.menu_id = rm.menu_id
- WHERE ur.user_id = 223 AND m.perms = 'studentMsg:studentClassChange:add'
- );
- -- 库中是否已存在 add 菜单权限码
- SELECT menu_id, menu_name, parent_id, perms, status, visible
- FROM sys_menu
- WHERE perms IN (
- 'studentMsg:class:change',
- 'studentMsg:studentClassChange:add',
- 'studentMsg:studentClassChange:list'
- )
- ORDER BY perms;
- -- ============================================================
- -- 以下为修复段:确认缺权限后再执行;先备份再改
- -- ============================================================
- -- ------------------------------------------------------------
- -- 0) 修改前备份相关表(带时间戳后缀,避免覆盖)
- -- ------------------------------------------------------------
- SET @bak_suffix = DATE_FORMAT(NOW(), '%Y%m%d_%H%i%s');
- SET @sql_bak_menu = CONCAT(
- 'CREATE TABLE IF NOT EXISTS sys_menu_bak_', @bak_suffix,
- ' AS SELECT * FROM sys_menu'
- );
- PREPARE stmt_bak_menu FROM @sql_bak_menu;
- EXECUTE stmt_bak_menu;
- DEALLOCATE PREPARE stmt_bak_menu;
- SET @sql_bak_role_menu = CONCAT(
- 'CREATE TABLE IF NOT EXISTS sys_role_menu_bak_', @bak_suffix,
- ' AS SELECT * FROM sys_role_menu'
- );
- PREPARE stmt_bak_role_menu FROM @sql_bak_role_menu;
- EXECUTE stmt_bak_role_menu;
- DEALLOCATE PREPARE stmt_bak_role_menu;
- SELECT
- CONCAT('sys_menu_bak_', @bak_suffix) AS menu_backup_table,
- CONCAT('sys_role_menu_bak_', @bak_suffix) AS role_menu_backup_table;
- -- ------------------------------------------------------------
- -- 1) 解析父菜单:优先挂在「换班级」列表菜单下,否则挂在「换班级」按钮同级父菜单
- -- ------------------------------------------------------------
- SET @parent_id = (
- SELECT parent_id
- FROM sys_menu
- WHERE perms = 'studentMsg:studentClassChange:list'
- AND menu_type IN ('C', 'M')
- ORDER BY menu_id
- LIMIT 1
- );
- -- list 本身若是目录/菜单,直接用其 menu_id 作父级
- SET @parent_id = IFNULL(
- (
- SELECT menu_id
- FROM sys_menu
- WHERE perms = 'studentMsg:studentClassChange:list'
- AND menu_type IN ('C', 'M')
- ORDER BY menu_id
- LIMIT 1
- ),
- @parent_id
- );
- -- 仍找不到时,退化为 class:change 按钮的父菜单
- SET @parent_id = IFNULL(
- @parent_id,
- (
- SELECT parent_id
- FROM sys_menu
- WHERE perms = 'studentMsg:class:change'
- ORDER BY menu_id
- LIMIT 1
- )
- );
- -- 最终兜底:学籍异动信息菜单(与学籍异动修复脚本同父级,仅当上面都找不到时)
- SET @parent_id = IFNULL(@parent_id, 2004197349643042818);
- SELECT @parent_id AS resolved_parent_id;
- -- ------------------------------------------------------------
- -- 2) 新增「换班级-新增」按钮权限(若不存在)
- -- ------------------------------------------------------------
- INSERT INTO sys_menu (
- menu_id, menu_name, parent_id, order_num, path, component, query_param,
- is_frame, is_cache, menu_type, visible, status, perms, icon,
- create_dept, create_by, create_time, update_by, update_time, remark
- )
- SELECT
- 2005461500000000002,
- '新增',
- @parent_id,
- 1,
- '',
- NULL,
- NULL,
- 1,
- 0,
- 'F',
- '0',
- '0',
- 'studentMsg:studentClassChange:add',
- '',
- 100,
- 1,
- NOW(),
- 1,
- NOW(),
- '补齐换班级提交接口权限,解决学生信息页换班级提交403'
- FROM DUAL
- WHERE NOT EXISTS (
- SELECT 1 FROM sys_menu WHERE perms = 'studentMsg:studentClassChange:add'
- );
- -- ------------------------------------------------------------
- -- 3) 给「学生信息管理(保留)」角色(3003)授权
- -- ------------------------------------------------------------
- INSERT INTO sys_role_menu (role_id, menu_id)
- SELECT 3003, m.menu_id
- FROM sys_menu m
- WHERE m.perms = 'studentMsg:studentClassChange:add'
- AND NOT EXISTS (
- SELECT 1 FROM sys_role_menu rm
- WHERE rm.role_id = 3003 AND rm.menu_id = m.menu_id
- );
- -- ------------------------------------------------------------
- -- 4) 兼容:所有已有「换班级」按钮权限的角色,一并补上 add
- -- ------------------------------------------------------------
- INSERT INTO sys_role_menu (role_id, menu_id)
- SELECT DISTINCT rm.role_id, add_menu.menu_id
- FROM sys_role_menu rm
- JOIN sys_menu btn ON btn.menu_id = rm.menu_id AND btn.perms = 'studentMsg:class:change'
- JOIN sys_menu add_menu ON add_menu.perms = 'studentMsg:studentClassChange:add'
- WHERE NOT EXISTS (
- SELECT 1 FROM sys_role_menu x
- WHERE x.role_id = rm.role_id AND x.menu_id = add_menu.menu_id
- );
- -- ------------------------------------------------------------
- -- 5) 校验:朱茏是否已具备 add 权限
- -- ------------------------------------------------------------
- SELECT
- u.user_id,
- u.user_name,
- u.nick_name,
- r.role_id,
- r.role_name,
- m.perms,
- m.menu_name,
- m.menu_id
- FROM sys_user u
- JOIN sys_user_role ur ON ur.user_id = u.user_id
- JOIN sys_role r ON r.role_id = ur.role_id
- JOIN sys_role_menu rm ON rm.role_id = r.role_id
- JOIN sys_menu m ON m.menu_id = rm.menu_id
- WHERE u.user_id = 223
- AND m.perms IN (
- 'studentMsg:class:change',
- 'studentMsg:studentClassChange:add',
- 'studentMsg:studentClassChange:list'
- )
- ORDER BY m.perms, r.role_id;
- SELECT
- 'studentMsg:studentClassChange:add' AS perms,
- EXISTS (
- SELECT 1
- FROM sys_user_role ur
- JOIN sys_role_menu rm ON rm.role_id = ur.role_id
- JOIN sys_menu m ON m.menu_id = rm.menu_id
- WHERE ur.user_id = 223 AND m.perms = 'studentMsg:studentClassChange:add'
- ) AS has_perm;
- -- ------------------------------------------------------------
- -- 回滚示例(按需执行,把后缀换成上面查出的备份表名)
- -- ------------------------------------------------------------
- -- TRUNCATE TABLE sys_role_menu;
- -- INSERT INTO sys_role_menu SELECT * FROM sys_role_menu_bak_YYYYMMDD_HHMMSS;
- -- DELETE FROM sys_menu WHERE perms = 'studentMsg:studentClassChange:add';
- -- -- 或整表回滚菜单:
- -- -- TRUNCATE TABLE sys_menu;
- -- -- INSERT INTO sys_menu SELECT * FROM sys_menu_bak_YYYYMMDD_HHMMSS;
|