Files
login_task_web/docs/权限管理.md

4.6 KiB
Raw Permalink Blame History

权限管理文档

概述

本系统采用基于角色的权限控制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. 数据权限

  • 代理商用户只能查看自己的相关数据
  • 管理员可以查看和管理所有数据

权限配置

添加新权限

  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. 检查权限变更后的效果