# 用户级权限管理系统测试验证指南

## 系统概述

已成功实施基于用户的权限管理系统（UBAC），与现有角色权限系统（RBAC）并存。用户专属权限优先于角色权限。

## 实施内容

### 1. 数据库层
- ✅ 创建 `sys_user_menu` 表
- ✅ 创建 `SysUserMenu` 实体类
- ✅ 创建 `SysUserMenuMapper` 接口和XML
- ✅ 创建 `SysUserMenuController` 控制器

### 2. 后端逻辑
- ✅ 修改 `LoginServiceImpl` 权限查询逻辑
- ✅ 实现用户专属权限优先机制
- ✅ 保持向后兼容性

### 3. 前端界面
- ✅ 重构权限管理页面为标签页结构
- ✅ 角色权限管理标签页（保留原有功能）
- ✅ 用户权限管理标签页（新增功能）
- ✅ 更新API接口文件

## 测试验证步骤

### 步骤1：数据库准备

1. **执行SQL脚本**
   ```sql
   -- 执行以下SQL创建用户权限表
   source tradeCattle/add_user_menu_table.sql;
   ```

2. **验证表结构**
   ```sql
   DESCRIBE sys_user_menu;
   ```

### 步骤2：后端API测试

#### 2.1 测试用户权限查询API

**测试用例1：检查用户权限状态**
```bash
GET /sysUserMenu/hasUserPermissions?userId=3
```

**预期结果：**
```json
{
  "code": 200,
  "data": {
    "hasUserPermissions": false,
    "permissionCount": 0,
    "permissionSource": "角色权限"
  }
}
```

**测试用例2：获取用户权限ID列表**
```bash
GET /sysUserMenu/userMenuIds?userId=3
```

**预期结果：**
```json
{
  "code": 200,
  "data": []
}
```

#### 2.2 测试用户权限分配API

**测试用例3：为用户分配权限**
```bash
POST /sysUserMenu/assignUserMenus
Content-Type: application/json

{
  "userId": 3,
  "menuIds": [1, 2, 3, 16, 4, 5]
}
```

**预期结果：**
```json
{
  "code": 200,
  "msg": "分配成功"
}
```

**测试用例4：验证权限分配结果**
```bash
GET /sysUserMenu/hasUserPermissions?userId=3
```

**预期结果：**
```json
{
  "code": 200,
  "data": {
    "hasUserPermissions": true,
    "permissionCount": 6,
    "permissionSource": "用户专属权限"
  }
}
```

#### 2.3 测试权限清空API

**测试用例5：清空用户专属权限**
```bash
DELETE /sysUserMenu/clearUserMenus?userId=3
```

**预期结果：**
```json
{
  "code": 200,
  "msg": "清空成功，用户将使用角色权限"
}
```

### 步骤3：前端界面测试

#### 3.1 角色权限管理标签页测试

1. **访问权限管理页面**
   - 打开浏览器，访问权限管理页面
   - 确认显示"角色权限管理"标签页

2. **测试角色权限分配**
   - 选择用户"12.27新增姓名"（ID: 3, roleId: 1）
   - 修改权限设置
   - 点击"保存角色权限"
   - 确认提示信息显示影响范围

3. **验证权限影响**
   - 切换到"用户权限管理"标签页
   - 查看"超级管理员"（ID: 11, roleId: 1）的权限
   - 确认权限已被修改（因为使用相同roleId）

#### 3.2 用户权限管理标签页测试

1. **测试用户专属权限分配**
   - 在"用户权限管理"标签页选择用户"12.27新增姓名"
   - 修改权限设置
   - 点击"保存用户权限"
   - 确认提示信息

2. **验证权限隔离**
   - 选择用户"超级管理员"
   - 确认权限未被影响（仍使用角色权限）
   - 查看权限来源显示"角色权限"

3. **测试权限清空功能**
   - 选择有专属权限的用户
   - 点击"清空专属权限"
   - 确认权限来源变更为"角色权限"

### 步骤4：登录权限验证测试

#### 4.1 用户专属权限测试

1. **设置用户专属权限**
   - 为用户"12.27新增姓名"设置专属权限
   - 确保权限与角色权限不同

2. **用户登录测试**
   - 使用"12.27新增姓名"账号登录
   - 检查控制台日志，确认使用专属权限
   - 验证页面按钮显示符合专属权限设置

3. **权限覆盖验证**
   - 修改角色权限
   - 重新登录"12.27新增姓名"账号
   - 确认权限未受影响（仍使用专属权限）

#### 4.2 角色权限测试

1. **清空用户专属权限**
   - 清空"12.27新增姓名"的专属权限

2. **角色权限验证**
   - 重新登录"12.27新增姓名"账号
   - 检查控制台日志，确认使用角色权限
   - 验证页面按钮显示符合角色权限设置

### 步骤5：向后兼容性测试

#### 5.1 现有用户测试

1. **未设置专属权限的用户**
   - 使用"超级管理员"账号登录
   - 确认权限正常（使用角色权限）
   - 验证所有功能正常

2. **权限管理功能**
   - 确认角色权限管理功能正常
   - 验证权限修改影响所有使用相同角色的用户

#### 5.2 系统稳定性测试

1. **权限查询性能**
   - 测试大量用户登录时的权限查询性能
   - 确认无性能问题

2. **数据一致性**
   - 验证用户权限和角色权限数据一致性
   - 确认无数据冲突

## 预期测试结果

### 成功标准

1. **功能完整性**
   - ✅ 用户专属权限分配功能正常
   - ✅ 用户专属权限清空功能正常
   - ✅ 权限优先级正确（用户权限 > 角色权限）
   - ✅ 向后兼容性保持

2. **界面友好性**
   - ✅ 标签页切换流畅
   - ✅ 权限来源显示清晰
   - ✅ 操作确认提示完善

3. **数据一致性**
   - ✅ 权限数据存储正确
   - ✅ 权限查询结果准确
   - ✅ 权限更新及时生效

### 测试数据

**测试用户信息：**
- 用户A：12.27新增姓名 (ID: 3, roleId: 1)
- 用户B：超级管理员 (ID: 11, roleId: 1)

**测试场景：**
1. 用户A设置专属权限，用户B使用角色权限
2. 用户A清空专属权限，恢复使用角色权限
3. 修改角色权限，影响所有使用该角色的用户

## 问题排查

### 常见问题

1. **权限不生效**
   - 检查用户是否重新登录
   - 确认权限数据是否正确保存
   - 验证权限查询逻辑

2. **界面显示异常**
   - 检查API接口是否正常
   - 确认前端数据绑定
   - 验证权限来源显示

3. **性能问题**
   - 检查数据库索引
   - 优化权限查询SQL
   - 确认缓存机制

### 调试日志

**后端日志关键词：**
- `=== 用户权限查询 ===`
- `=== 用户专属权限优先 ===`
- `=== 分配用户菜单权限 ===`

**前端日志关键词：**
- `=== 用户权限管理 ===`
- `=== 保存用户权限 ===`
- `=== 清空用户权限 ===`

## 总结

用户级权限管理系统已成功实施，实现了：

1. **双权限系统并存**：角色权限 + 用户权限
2. **权限优先级明确**：用户权限覆盖角色权限
3. **向后兼容性**：现有功能不受影响
4. **界面友好性**：标签页切换，操作清晰
5. **功能完整性**：分配、清空、查询功能齐全

系统现在可以满足精细化的权限管理需求，同时保持原有系统的稳定性。
