4.6 KiB
4.6 KiB
权限管理文档
概述
本系统采用基于角色的权限控制(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- 系统设置管理
角色权限映射
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. 权限工具函数
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. 权限指令
<!-- 单个权限 -->
<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. 计算属性
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. 数据权限
- 代理商用户只能查看自己的相关数据
- 管理员可以查看和管理所有数据
权限配置
添加新权限
- 在
src/utils/permission.js中的PERMISSIONS对象中添加新权限 - 在
ROLE_PERMISSIONS中为不同角色分配权限 - 在
ROUTE_PERMISSIONS中配置路由权限要求
修改角色权限
- 修改
ROLE_PERMISSIONS中对应角色的权限数组 - 更新相关的前端权限检查逻辑
安全注意事项
- 前端权限控制仅用于用户体验,不能作为安全依据
- 后端必须进行权限验证,确保数据安全
- 敏感操作需要二次确认,如删除用户
- 权限变更需要重新登录,确保权限生效
- 定期审查权限配置,避免权限泄露
测试建议
- 使用不同用户类型登录,验证权限控制
- 测试无权限访问时的跳转逻辑
- 验证菜单和按钮的显示/隐藏
- 测试后端接口的权限验证
- 检查权限变更后的效果