Files
login_task_web/docs/权限管理.md

161 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 权限管理文档
## 概述
本系统采用基于角色的权限控制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. 检查权限变更后的效果