添加 vue-router 依赖并配置路由,重构登录组件,完善 HTTP 请求拦截器以支持 token 刷新机制

This commit is contained in:
zyh
2025-08-24 19:49:39 +08:00
parent 69bf5500cd
commit 17a1d4e85a
30 changed files with 2368 additions and 28 deletions

160
docs/权限管理.md Normal file
View File

@@ -0,0 +1,160 @@
# 权限管理文档
## 概述
本系统采用基于角色的权限控制RBAC机制通过用户类型ADMIN/AGENT来控制用户的功能访问权限。
## 用户类型
### ADMIN管理员
- 拥有系统所有功能的访问权限
- 可以管理用户账户(创建、编辑、删除、启用/禁用)
- 可以管理游戏、订单、报表等所有模块
- 可以访问系统设置
### AGENT代理商
- 只能查看游戏、订单、报表等基础信息
- 无法访问用户管理功能
- 无法访问系统设置
- 主要用于业务操作,不具备管理权限
## 权限定义
### 用户管理权限
- `user:view` - 查看用户列表
- `user:create` - 创建用户
- `user:update` - 编辑用户
- `user:delete` - 删除用户
- `user:manage` - 用户管理(包含所有用户相关权限)
### 游戏管理权限
- `game:view` - 查看游戏列表
- `game:create` - 创建游戏
- `game:update` - 编辑游戏
- `game:delete` - 删除游戏
- `game:manage` - 游戏管理(包含所有游戏相关权限)
### 订单管理权限
- `order:view` - 查看订单列表
- `order:manage` - 订单管理
### 报表分析权限
- `report:view` - 查看报表
### 系统设置权限
- `setting:manage` - 系统设置管理
## 角色权限映射
```javascript
const ROLE_PERMISSIONS = {
ADMIN: [
// 管理员拥有所有权限
'user:manage', 'user:create', 'user:update', 'user:delete', 'user:view',
'game:manage', 'game:create', 'game:update', 'game:delete', 'game:view',
'order:manage', 'order:view',
'report:view',
'setting:manage',
],
AGENT: [
// 代理商只有查看权限
'game:view',
'order:view',
'report:view',
]
}
```
## 前端权限控制
### 1. 路由权限控制
- 在路由守卫中检查用户是否有访问权限
- 无权限时自动跳转到仪表盘页面
### 2. 菜单权限控制
- 根据用户权限动态显示/隐藏菜单项
- 代理商用户看不到"用户管理"和"系统设置"菜单
### 3. 页面权限控制
- 在页面组件中检查用户权限
- 无权限时显示权限不足提示
### 4. 操作权限控制
- 根据用户权限显示/隐藏操作按钮
- 代理商用户无法进行用户管理操作
## 权限检查方法
### 1. 权限工具函数
```javascript
import { hasPermission, hasAnyPermission, hasAllPermissions } from '@/utils/permission'
// 检查单个权限
const canCreateUser = hasPermission('user:create')
// 检查多个权限(任一)
const canManageUsers = hasAnyPermission(['user:create', 'user:update', 'user:delete'])
// 检查多个权限(全部)
const canFullManage = hasAllPermissions(['user:create', 'user:update', 'user:delete'])
```
### 2. 权限指令
```vue
<!-- 单个权限 -->
<el-button v-permission="'user:create'">新增用户</el-button>
<!-- 多个权限OR逻辑 -->
<el-button v-permission="['user:create', 'user:update']">操作</el-button>
<!-- 多个权限AND逻辑 -->
<el-button v-permission="['user:create', 'user:update', 'AND']">操作</el-button>
<!-- 对象格式 -->
<el-button v-permission="{ permission: ['user:create', 'user:update'], logic: 'OR' }">操作</el-button>
```
### 3. 计算属性
```javascript
const canViewUsers = computed(() => hasPermission('user:view'))
const canCreateUser = computed(() => hasPermission('user:create'))
const canEditUser = computed(() => hasPermission('user:update'))
const canDeleteUser = computed(() => hasPermission('user:delete'))
```
## 后端权限控制
### 1. 接口权限
- 用户管理接口(`/api/admin/accounts`)只允许 ADMIN 用户访问
- 代理商用户访问时返回 403 Forbidden 错误
### 2. 数据权限
- 代理商用户只能查看自己的相关数据
- 管理员可以查看和管理所有数据
## 权限配置
### 添加新权限
1.`src/utils/permission.js` 中的 `PERMISSIONS` 对象中添加新权限
2.`ROLE_PERMISSIONS` 中为不同角色分配权限
3.`ROUTE_PERMISSIONS` 中配置路由权限要求
### 修改角色权限
1. 修改 `ROLE_PERMISSIONS` 中对应角色的权限数组
2. 更新相关的前端权限检查逻辑
## 安全注意事项
1. **前端权限控制仅用于用户体验**,不能作为安全依据
2. **后端必须进行权限验证**,确保数据安全
3. **敏感操作需要二次确认**,如删除用户
4. **权限变更需要重新登录**,确保权限生效
5. **定期审查权限配置**,避免权限泄露
## 测试建议
1. 使用不同用户类型登录,验证权限控制
2. 测试无权限访问时的跳转逻辑
3. 验证菜单和按钮的显示/隐藏
4. 测试后端接口的权限验证
5. 检查权限变更后的效果