diff --git a/docs/07-运维文档/角色权限配置指南.md b/docs/07-运维文档/角色权限配置指南.md new file mode 100644 index 0000000..6329435 --- /dev/null +++ b/docs/07-运维文档/角色权限配置指南.md @@ -0,0 +1,288 @@ +# 角色权限配置指南 + +> **作者**:湖北新华业务中台研发团队 +> **日期**:2026-01-31 +> **用途**:管理员角色菜单权限配置和问题修复 + +--- + +## 一、问题说明 + +### 1.1 问题现象 + +登录管理后台后,左侧菜单栏**只显示盘古业务菜单**,缺少RuoYi系统管理菜单: + +**缺失菜单**: +- ❌ **系统管理**(用户管理、角色管理、菜单管理、部门管理等) +- ❌ **系统监控**(在线用户、定时任务、数据监控等) +- ❌ **系统工具**(表单构建、代码生成、系统接口) +- ❌ **若依官网** + +**仅显示**: +- ✅ **盘古管理**(学校、会员、学生、应用、基础数据) + +### 1.2 原因分析 + +**根本原因**:管理员角色(role_id=1)缺少RuoYi系统菜单的权限 + +**验证方法**: +```sql +-- 检查管理员角色的菜单权限数量 +SELECT COUNT(*) FROM sys_role_menu WHERE role_id = 1; + +-- 统计各类型菜单权限 +SELECT + CASE + WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' + ELSE '盘古业务菜单' + END AS menu_type, + COUNT(*) as count +FROM sys_role_menu rm +INNER JOIN sys_menu m ON rm.menu_id = m.menu_id +WHERE rm.role_id = 1 +GROUP BY CASE WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' ELSE '盘古业务菜单' END; +``` + +**问题权限配置**: +``` +RuoYi系统菜单:0条 ❌ (应该有72条) +盘古业务菜单: 30条 ✅ +合计: 30条 ❌ (应该有118条) +``` + +--- + +## 二、解决方案 + +### 2.1 方法一:使用修复脚本(推荐) + +#### 步骤1:进入SQL目录 +```bash +cd /path/to/pangu-user-platform/sql +``` + +#### 步骤2:执行修复脚本 +```bash +./fix_admin_permissions.sh +``` + +#### 步骤3:按提示确认 +``` +是否为管理员角色添加所有菜单权限?(y/n): y +``` + +#### 步骤4:退出登录并重新登录 + +**⚠️ 重要**:权限修改后,必须**退出登录并重新登录**才会生效! + +### 2.2 方法二:手动执行SQL + +```sql +-- 1. 删除管理员角色现有权限 +DELETE FROM sys_role_menu WHERE role_id = 1; + +-- 2. 为管理员角色添加所有菜单权限 +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT 1, menu_id FROM sys_menu; + +-- 3. 验证权限数量 +SELECT COUNT(*) as total FROM sys_role_menu WHERE role_id = 1; +-- 预期结果:118条 +``` + +### 2.3 方法三:通过管理界面配置 + +**步骤**: +1. 以管理员身份登录(如果能看到系统管理菜单) +2. 进入 **系统管理 > 角色管理** +3. 点击超级管理员角色的**修改**按钮 +4. 在**菜单权限**标签页,勾选所有菜单 +5. 点击**提交**保存 + +**注意**:此方法前提是能看到系统管理菜单。如果看不到,请使用方法一或方法二。 + +--- + +## 三、验证结果 + +### 3.1 数据库验证 + +```sql +-- 验证权限总数 +SELECT COUNT(*) as total FROM sys_role_menu WHERE role_id = 1; +-- 预期结果:118条 + +-- 验证各类型菜单权限 +SELECT + CASE + WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' + ELSE '盘古业务菜单' + END AS menu_type, + COUNT(*) as count +FROM sys_role_menu rm +INNER JOIN sys_menu m ON rm.menu_id = m.menu_id +WHERE rm.role_id = 1 +GROUP BY CASE WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' ELSE '盘古业务菜单' END; +-- 预期结果: +-- RuoYi系统菜单 72 +-- 盘古业务菜单 46 + +-- 验证顶级菜单权限 +SELECT m.menu_id, m.menu_name, m.order_num +FROM sys_menu m +INNER JOIN sys_role_menu rm ON m.menu_id = rm.menu_id +WHERE rm.role_id = 1 AND m.parent_id = 0 +ORDER BY m.order_num; +-- 预期结果:盘古管理、系统管理、系统监控、系统工具、若依官网 +``` + +### 3.2 前端页面验证 + +**退出登录并重新登录后**,菜单栏应显示: + +``` +📋 盘古管理 ✅ + ├─ 学校管理 + ├─ 会员管理 + ├─ 学生管理 + ├─ 应用管理 + └─ 基础数据 + +⚙️ 系统管理 ✅ (新增) + ├─ 用户管理 + ├─ 角色管理 + ├─ 菜单管理 + ├─ 部门管理 + ├─ 岗位管理 + ├─ 字典管理 + ├─ 参数设置 + ├─ 通知公告 + └─ 日志管理 + +📊 系统监控 ✅ (新增) + ├─ 在线用户 + ├─ 定时任务 + ├─ 数据监控 + ├─ 服务监控 + └─ 缓存监控 + +🔧 系统工具 ✅ (新增) + ├─ 表单构建 + ├─ 代码生成 + └─ 系统接口 + +🌐 若依官网 ✅ (新增) +``` + +--- + +## 四、角色权限管理 + +### 4.1 权限分配原则 + +| 角色 | 权限范围 | 建议配置 | +|------|---------|---------| +| **超级管理员** | 所有菜单 | 118个菜单全部勾选 ✅ | +| **普通管理员** | 业务菜单 | 盘古管理46个菜单 ✅ | +| **教师** | 部分业务菜单 | 会员管理、学生管理 ✅ | +| **家长** | 查看功能 | 学生查询、学校查询 ✅ | + +### 4.2 新建角色权限配置 + +**步骤**: +1. **系统管理 > 角色管理** > 点击**新增** +2. 填写角色信息(角色名称、权限字符、排序) +3. 设置**菜单权限**: + - 系统管理员:勾选所有菜单 + - 业务管理员:只勾选盘古管理下的菜单 + - 教师/家长:根据需要勾选特定菜单 +4. 设置**数据权限**(本部门数据/全部数据等) +5. 点击**提交**保存 + +### 4.3 修改用户角色 + +**步骤**: +1. **系统管理 > 用户管理** > 点击用户的**修改**按钮 +2. 在**角色**下拉框中选择角色 +3. 点击**提交**保存 +4. **⚠️ 用户需要退出登录并重新登录** + +--- + +## 五、常见问题 + +### Q1:修复权限后仍然看不到菜单? + +**A**:请按以下步骤排查: +1. ✅ **退出登录并重新登录**(必须!) +2. ✅ 清除浏览器缓存 +3. ✅ 检查菜单状态:`SELECT menu_id, menu_name, visible, status FROM sys_menu WHERE parent_id = 0;` + - `visible = '0'` 表示显示 + - `status = '0'` 表示正常 +4. ✅ 检查用户角色:`SELECT * FROM sys_user_role WHERE user_id = 1;` + +### Q2:只想给部分菜单权限怎么办? + +**A**:不要使用修复脚本,通过管理界面手动勾选: +1. **系统管理 > 角色管理** > 修改角色 +2. 在**菜单权限**标签页,只勾选需要的菜单 +3. 点击**提交**保存 + +### Q3:新用户如何分配权限? + +**A**: +1. **系统管理 > 用户管理** > 新增用户 +2. 在**角色**下拉框中选择合适的角色 +3. 如果需要特殊权限,先创建新角色再分配 + +### Q4:权限修复脚本会影响其他角色吗? + +**A**:不会。脚本只修复role_id=1(超级管理员)的权限,其他角色不受影响。 + +--- + +## 六、权限数据备份 + +### 6.1 备份权限数据 + +```sql +-- 备份所有角色权限 +CREATE TABLE sys_role_menu_backup_20260131 AS +SELECT * FROM sys_role_menu; + +-- 备份用户角色关系 +CREATE TABLE sys_user_role_backup_20260131 AS +SELECT * FROM sys_user_role; +``` + +### 6.2 恢复权限数据 + +```sql +-- 恢复角色权限 +TRUNCATE TABLE sys_role_menu; +INSERT INTO sys_role_menu SELECT * FROM sys_role_menu_backup_20260131; + +-- 恢复用户角色 +TRUNCATE TABLE sys_user_role; +INSERT INTO sys_user_role SELECT * FROM sys_user_role_backup_20260131; +``` + +--- + +## 七、相关文件 + +| 文件路径 | 说明 | +|---------|------| +| `sql/fix_admin_permissions.sh` | 管理员权限自动修复脚本 | +| `sql/sys_menu_complete.sql` | 完整菜单数据SQL | +| `docs/07-运维文档/菜单数据恢复指南.md` | 菜单数据恢复文档 | + +--- + +## 八、技术支持 + +如有问题,请联系:**湖北新华业务中台研发团队** + +--- + +*最后更新:2026-01-31* diff --git a/sql/fix_admin_permissions.sh b/sql/fix_admin_permissions.sh new file mode 100755 index 0000000..570d1e7 --- /dev/null +++ b/sql/fix_admin_permissions.sh @@ -0,0 +1,120 @@ +#!/bin/bash +# ============================================================ +# 脚本名称:fix_admin_permissions.sh +# 功能说明:修复管理员角色菜单权限(添加所有菜单权限) +# 作 者:湖北新华业务中台研发团队 +# 创建时间:2026-01-31 +# 使用方法:./fix_admin_permissions.sh +# ============================================================ + +set -e + +# 数据库配置 +DB_HOST="8.148.25.55" +DB_PORT="3306" +DB_USER="root" +DB_PASS="aly2024A" +DB_NAME="pguser-db" + +echo "============================================================" +echo "管理员角色菜单权限修复工具" +echo "============================================================" +echo "" + +# 1. 检查当前管理员角色权限 +echo "1. 检查当前管理员角色权限..." +mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " +SELECT + CASE + WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' + ELSE '盘古业务菜单' + END AS menu_type, + COUNT(*) as count +FROM sys_role_menu rm +INNER JOIN sys_menu m ON rm.menu_id = m.menu_id +WHERE rm.role_id = 1 +GROUP BY CASE WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' ELSE '盘古业务菜单' END +WITH ROLLUP; +" 2>&1 | grep -v "Warning" + +echo "" +echo "2. 菜单总数统计..." +mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " +SELECT + '系统菜单总数' AS item, + COUNT(*) as count +FROM sys_menu +UNION ALL +SELECT + '管理员已分配' AS item, + COUNT(*) as count +FROM sys_role_menu +WHERE role_id = 1; +" 2>&1 | grep -v "Warning" + +echo "" +read -p "是否为管理员角色添加所有菜单权限?(y/n): " confirm + +if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then + echo "" + echo "正在修复管理员角色权限..." + + # 备份当前权限 + echo " - 创建权限备份..." + mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " + CREATE TABLE IF NOT EXISTS sys_role_menu_backup_$(date +%Y%m%d) AS + SELECT * FROM sys_role_menu WHERE role_id = 1; + " 2>&1 | grep -v "Warning" + + # 删除现有权限 + echo " - 清空现有权限..." + mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " + DELETE FROM sys_role_menu WHERE role_id = 1; + " 2>&1 | grep -v "Warning" + + # 添加所有菜单权限 + echo " - 添加所有菜单权限..." + mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " + INSERT INTO sys_role_menu (role_id, menu_id) + SELECT 1, menu_id FROM sys_menu; + " 2>&1 | grep -v "Warning" + + echo "" + echo "✅ 权限修复完成!" + echo "" + echo "修复后的权限统计:" + mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " + SELECT + CASE + WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' + ELSE '盘古业务菜单' + END AS menu_type, + COUNT(*) as count + FROM sys_role_menu rm + INNER JOIN sys_menu m ON rm.menu_id = m.menu_id + WHERE rm.role_id = 1 + GROUP BY CASE WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' ELSE '盘古业务菜单' END + WITH ROLLUP; + " 2>&1 | grep -v "Warning" + + echo "" + echo "顶级菜单权限:" + mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e " + SELECT m.menu_id, m.menu_name, m.order_num + FROM sys_menu m + INNER JOIN sys_role_menu rm ON m.menu_id = rm.menu_id + WHERE rm.role_id = 1 AND m.parent_id = 0 + ORDER BY m.order_num; + " 2>&1 | grep -v "Warning" + + echo "" + echo "⚠️ 请退出登录并重新登录,菜单权限才会生效!" +else + echo "" + echo "❌ 操作已取消" +fi + +echo "" +echo "============================================================" +echo "修复完成!" +echo "============================================================"