This commit is contained in:
zlwu committed 2026-10-20 11:50:53 +08:00
1 parent a0bb39d069
commit 6034b215e5
19 files changed
+1396 -10

No files matched your search

@@ -0,0 +1,342 @@
-- ============================================================
-- 临时权限修复:学生管理员设置「分配管理范围」
-- 背景:
-- 页面:学生管理员设置 / 自定义管理员 / 为【xxx】分配管理范围
-- 提交接口:POST /xgStudentManagerSource/studentManagerSource/grantDeptAuth
-- 后端权限:xgStudentManagerSource:studentManagerSource:grantDeptAuth
-- 前端无按钮权限控制,点确定后接口 403:
-- 黄条「无访问权限,可能原因:1. 用户权限不足…」
-- 红字「分配失败,请重试」
-- 该权限码是后加的自定义接口,菜单里往往没有对应按钮,角色也就授不了
-- 适用:
-- 朱茏老师(user_id=223,角色含 3003-学生信息管理)
-- 以及已经能打开本模块(已有管理员列表/授权查询权限)的同类角色
-- 执行后:
-- 相关用户需重新登录,使权限缓存生效
-- ============================================================
-- ------------------------------------------------------------
-- A) 先查(只读,可单独执行)
-- ------------------------------------------------------------
-- A1. 朱茏当前角色,以及本模块相关权限(无行=该权限没有)
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 LIKE 'xgStudentManager%'
OR m.menu_name LIKE '%学生管理员%'
)
ORDER BY m.perms, r.role_id;
-- A2. 关键权限是否已具备(1=有,0=没有)
SELECT
p.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 = p.perms
) AS has_perm
FROM (
SELECT 'xgStudentManager:studentManager:list' AS perms
UNION ALL SELECT 'xgStudentManagerSource:studentManagerSource:list'
UNION ALL SELECT 'xgStudentManagerSource:studentManagerSource:query'
UNION ALL SELECT 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
) p;
-- A3. 库里是否已有这些菜单权限码(grantDeptAuth 无行=需要下面的修复段补菜单)
SELECT menu_id, menu_name, parent_id, menu_type, perms, status, visible
FROM sys_menu
WHERE perms IN (
'xgStudentManager:studentManager:list',
'xgStudentManagerSource:studentManagerSource:list',
'xgStudentManagerSource:studentManagerSource:query',
'xgStudentManagerSource:studentManagerSource:edit',
'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
)
OR menu_name LIKE '%学生管理员%'
ORDER BY parent_id, order_num, menu_id;
-- ============================================================
-- 以下为修复段:确认缺 grantDeptAuth 后再执行;先备份再改
-- ============================================================
-- ------------------------------------------------------------
-- 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) 解析父菜单(一条 SELECT,避免 Navicat 把 SET+子查询拆段)
-- 优先级:授权关系列表菜单 > 其父级 > 同模块按钮父级 > 学生管理员设置 > 管理员列表父级
-- ------------------------------------------------------------
SET @parent_id = NULL;
SELECT picked.menu_id INTO @parent_id
FROM (
SELECT menu_id, 1 AS ord
FROM sys_menu
WHERE perms = 'xgStudentManagerSource:studentManagerSource:list'
AND menu_type IN ('C', 'M')
UNION ALL
SELECT parent_id, 2
FROM sys_menu
WHERE perms = 'xgStudentManagerSource:studentManagerSource:list'
UNION ALL
SELECT parent_id, 3
FROM sys_menu
WHERE perms IN (
'xgStudentManagerSource:studentManagerSource:query',
'xgStudentManagerSource:studentManagerSource:edit',
'xgStudentManagerSource:studentManagerSource:add'
)
UNION ALL
SELECT menu_id, 4
FROM sys_menu
WHERE menu_name LIKE '%学生管理员设置%'
AND menu_type IN ('C', 'M')
UNION ALL
SELECT parent_id, 5
FROM sys_menu
WHERE perms = 'xgStudentManager:studentManager:list'
) picked
WHERE picked.menu_id IS NOT NULL
ORDER BY picked.ord, picked.menu_id
LIMIT 1;
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
2005461500000000003,
'分配管理范围',
@parent_id,
6,
'',
NULL,
NULL,
1,
0,
'F',
'0',
'0',
'xgStudentManagerSource:studentManagerSource:grantDeptAuth',
'',
100,
1,
NOW(),
1,
NOW(),
'补齐自定义管理员分配管理范围接口权限,解决提交403'
FROM DUAL
WHERE @parent_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM sys_menu
WHERE perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
);
-- 父菜单没解析到时,这条会提示,且上面的 INSERT 不会写入
SELECT
CASE
WHEN @parent_id IS NULL THEN '未找到父菜单,未插入按钮。请先看 A3 的菜单结果,手工指定 parent_id 后再执行第 2 步'
WHEN EXISTS (
SELECT 1 FROM sys_menu
WHERE perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
) THEN 'grantDeptAuth 菜单已存在(含本次新建)'
ELSE '未插入,请检查 sys_menu'
END AS menu_insert_result;
-- ------------------------------------------------------------
-- 3) 给「学生信息管理」角色(3003)授权(朱茏已拥有该角色)
-- ------------------------------------------------------------
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3003, m.menu_id
FROM sys_menu m
WHERE m.perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id = 3003 AND rm.menu_id = m.menu_id
);
-- ------------------------------------------------------------
-- 4) 兼容:已能使用本模块的角色,一并补上分配范围权限
-- 判定:已有管理员列表、授权关系查询/列表/修改,或菜单名含「学生管理员设置」
-- ------------------------------------------------------------
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT DISTINCT rm.role_id, grant_menu.menu_id
FROM sys_role_menu rm
JOIN sys_menu owned ON owned.menu_id = rm.menu_id
JOIN sys_menu grant_menu
ON grant_menu.perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
WHERE (
owned.perms IN (
'xgStudentManager:studentManager:list',
'xgStudentManagerSource:studentManagerSource:list',
'xgStudentManagerSource:studentManagerSource:query',
'xgStudentManagerSource:studentManagerSource:edit',
'xgStudentManagerSource:studentManagerSource:add'
)
OR owned.menu_name LIKE '%学生管理员设置%'
)
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu x
WHERE x.role_id = rm.role_id AND x.menu_id = grant_menu.menu_id
);
-- ------------------------------------------------------------
-- 5) 校验:朱茏是否已具备分配范围权限
-- ------------------------------------------------------------
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 = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth';
-- 有行=已具备。无行时看她的角色是否在第 3/4 步的授权范围内
SELECT
'xgStudentManagerSource:studentManagerSource:grantDeptAuth' 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 = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
) AS has_perm;
-- ------------------------------------------------------------
-- 6) 复查是否执行成功(只读,可单独反复执行)
-- 期望:menu_ready=1,role_3003_ready=1,zhulong_ready=1
-- ------------------------------------------------------------
SELECT
EXISTS (
SELECT 1 FROM sys_menu
WHERE perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
AND menu_type = 'F'
AND status = '0'
AND parent_id IS NOT NULL
) AS menu_ready,
EXISTS (
SELECT 1
FROM sys_role_menu rm
JOIN sys_menu m ON m.menu_id = rm.menu_id
WHERE rm.role_id = 3003
AND m.perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
) AS role_3003_ready,
EXISTS (
SELECT 1
FROM sys_user u
JOIN sys_user_role ur ON ur.user_id = u.user_id
JOIN sys_role_menu rm ON rm.role_id = ur.role_id
JOIN sys_menu m ON m.menu_id = rm.menu_id
WHERE u.user_id = 223
AND u.nick_name = '朱茏'
AND m.perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
AND m.status = '0'
) AS zhulong_ready;
-- 明细:按钮挂在哪个菜单下,哪些角色拿到了
SELECT
m.menu_id,
m.menu_name,
m.parent_id,
p.menu_name AS parent_menu_name,
m.perms,
m.menu_type,
m.status,
r.role_id,
r.role_name
FROM sys_menu m
LEFT JOIN sys_menu p ON p.menu_id = m.parent_id
LEFT JOIN sys_role_menu rm ON rm.menu_id = m.menu_id
LEFT JOIN sys_role r ON r.role_id = rm.role_id
WHERE m.perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
ORDER BY r.role_id;
-- 明细:朱茏通过哪个角色拥有该权限(有行即成功)
SELECT
u.user_id,
u.user_name,
u.nick_name,
r.role_id,
r.role_name,
m.menu_id,
m.menu_name,
m.perms,
m.status AS menu_status
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 = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth';
-- ------------------------------------------------------------
-- 回滚示例(按需执行,把后缀换成上面查出的备份表名)
-- ------------------------------------------------------------
-- DELETE FROM sys_role_menu
-- WHERE menu_id IN (
-- SELECT menu_id FROM sys_menu
-- WHERE perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
-- );
-- DELETE FROM sys_menu
-- WHERE perms = 'xgStudentManagerSource:studentManagerSource:grantDeptAuth'
-- AND menu_id = 2005461500000000003;
-- -- 或整表回滚:
-- -- TRUNCATE TABLE sys_role_menu;
-- -- INSERT INTO sys_role_menu SELECT * FROM sys_role_menu_bak_YYYYMMDD_HHMMSS;
-- -- TRUNCATE TABLE sys_menu;
-- -- INSERT INTO sys_menu SELECT * FROM sys_menu_bak_YYYYMMDD_HHMMSS;
@@ -0,0 +1,132 @@
-- ============================================================
-- 临时权限修复:学籍异动「新增」权限(退学/休学/复学/毕业提交接口)
-- 背景:
-- 前端退学按钮权限:studentMsg:status:tuixue
-- 后端提交接口校验:studentMsg:studentStatusChange:add
-- 系统菜单中原先缺少 add 权限码,导致有按钮但提交报 403
-- 适用:
-- 朱茏老师(user_id=223,角色含 3003-学生信息管理)及同类角色
-- 执行后:
-- 相关用户需重新登录,使权限缓存生效
-- ============================================================
-- ------------------------------------------------------------
-- 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) 新增「学籍异动-新增」按钮权限(挂在「学籍异动信息」菜单下)
-- ------------------------------------------------------------
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
2005461500000000001,
'新增',
2004197349643042818, -- 学籍异动信息
0,
'',
NULL,
NULL,
1,
0,
'F',
'0',
'0',
'studentMsg:studentStatusChange:add',
'',
100,
1,
NOW(),
1,
NOW(),
'补齐学籍异动提交接口权限,解决退学/休学等提交403'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE perms = 'studentMsg:studentStatusChange:add'
);
-- 若库中已用其他 menu_id 创建了同名 perms,下面授权统一按 perms 查找 menu_id
-- ------------------------------------------------------------
-- 2) 给「学生信息管理(保留)」角色(3003)授权(朱茏已拥有该角色)
-- ------------------------------------------------------------
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3003, m.menu_id
FROM sys_menu m
WHERE m.perms = 'studentMsg:studentStatusChange:add'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id = 3003 AND rm.menu_id = m.menu_id
);
-- ------------------------------------------------------------
-- 3) 兼容:所有已拥有「退学」按钮权限的角色,一并补上 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 tuixue ON tuixue.menu_id = rm.menu_id AND tuixue.perms = 'studentMsg:status:tuixue'
JOIN sys_menu add_menu ON add_menu.perms = 'studentMsg:studentStatusChange: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
);
-- ------------------------------------------------------------
-- 4) 校验:朱茏是否已具备 add 权限
-- ------------------------------------------------------------
SELECT
u.user_id,
u.user_name,
u.nick_name,
r.role_id,
r.role_name,
m.perms,
m.menu_name
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:status:tuixue',
'studentMsg:studentStatusChange:add',
'studentMsg:studentStatusChange:list'
)
ORDER BY m.perms, r.role_id;
-- ------------------------------------------------------------
-- 回滚示例(按需执行,把后缀换成上面查出的备份表名)
-- ------------------------------------------------------------
-- 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:studentStatusChange:add';
-- -- 或整表回滚菜单:
-- -- TRUNCATE TABLE sys_menu;
-- -- INSERT INTO sys_menu SELECT * FROM sys_menu_bak_YYYYMMDD_HHMMSS;
@@ -0,0 +1,246 @@
-- ============================================================
-- 临时权限修复:换班级「新增」权限(学生信息页提交换班级接口)
-- 背景:
-- 前端换班级按钮权限: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;
+1 -1
View File
@@ -4622,7 +4622,7 @@ CREATE TABLE `xg_holiday_stay` (
`apply_end_date` datetime NOT NULL COMMENT '申请留宿结束日期',
`stay_reason` text NOT NULL COMMENT '留宿原因(必填)',
`stay_reason_type` varchar(20) DEFAULT NULL COMMENT '留宿原因类型(学习、实习、家庭困难、其他)',
`student_phone` varchar(20) NOT NULL COMMENT '学生联系电话',
`student_phone` varchar(20) DEFAULT NULL COMMENT '学生联系电话',
`emergency_contact` varchar(50) NOT NULL COMMENT '紧急联系人姓名',
`emergency_phone` varchar(20) NOT NULL COMMENT '紧急联系人电话',
`parent_consent` char(1) NOT NULL DEFAULT '1' COMMENT '家长同意(0否 1是)',
@@ -0,0 +1,23 @@
-- ============================================================
-- 假期留宿:student_phone 允许为空
-- 背景:学生档案无手机号时,申请 INSERT 省略 student_phone,
-- 原 NOT NULL 无默认值会报 Field 'student_phone' doesn't have a default value
-- 目的:仅改库即可恢复申请,无需立即发版
-- 日期:2026-10-15
-- ============================================================
-- 主表:允许联系电话为空
ALTER TABLE `xg_holiday_stay`
MODIFY COLUMN `student_phone` varchar(20) DEFAULT NULL COMMENT '学生联系电话';
-- 如存在历史表,一并放宽(没有可跳过)
-- ALTER TABLE `xg_holiday_stay_his`
-- MODIFY COLUMN `student_phone` varchar(20) DEFAULT NULL COMMENT '学生联系电话';
-- ------------------------------------------------------------
-- 可选预防:紧急联系人/电话同样是 NOT NULL,表单空串一般能写入;
-- 若希望彻底避免同类 SQL 报错,可一并执行:
-- ALTER TABLE `xg_holiday_stay`
-- MODIFY COLUMN `emergency_contact` varchar(50) DEFAULT NULL COMMENT '紧急联系人姓名',
-- MODIFY COLUMN `emergency_phone` varchar(20) DEFAULT NULL COMMENT '紧急联系人电话';
-- ------------------------------------------------------------