# 角色权限配置指南

> **作者**：湖北新华业务中台研发团队  
> **日期**：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*
