HaniBlindBox/docs/后台管理系统-业务流程图.md
2026-01-05 23:22:20 +08:00

946 lines
80 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.

# HoneyBox 后台管理系统 - 业务流程图
## 系统概述
后台管理系统HoneyBox.Admin是一个基于 ASP.NET Core + Vue3 + Element Plus 的 RBAC 权限管理系统,用于管理 HoneyBox 抽奖盲盒平台的后台运营。
---
## 一、系统架构总览
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ HoneyBox 后台管理系统 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 认证模块 │ │ 用户管理 │ │ 角色管理 │ │ 菜单管理 │ │
│ │ (Auth) │ │ (AdminUser) │ │ (Role) │ │ (Menu) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ │
│ │ 部门管理 │ │ 权限管理 │ │ 操作日志 │ │ 个人中心 │ │
│ │(Department) │ │(Permission) │ │(OperationLog)│ │ (Profile) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 二、用户认证流程
### 2.1 登录流程
```
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户 │ │ 前端 │ │ 后端 │ │ 数据库 │
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │ │
│ 1. 打开登录页 │ │ │
│───────────────>│ │ │
│ │ │ │
│ │ 2. 请求验证码 │ │
│ │───────────────>│ │
│ │ │ 生成验证码 │
│ │ │ 存入缓存(5min)│
│ │ 验证码图片 │ │
│ │<───────────────│ │
│ 显示验证码 │ │ │
│<───────────────│ │ │
│ │ │ │
│ 3. 输入账号 │ │ │
│ 密码+验证码│ │ │
│───────────────>│ │ │
│ │ 4. 提交登录 │ │
│ │───────────────>│ │
│ │ │ 校验验证码 │
│ │ │ 校验密码 │
│ │ │ 生成双Token │
│ │ │───────────────>│ 存储RefreshToken
│ │ AccessToken │ │
│ │ RefreshToken │ │
│ │ UserInfo │<───────────────│
│ │<───────────────│ │
│ │ │ │
│ │ 5. 存储Token │ │
│ │ 获取用户菜单 │ │
│ │───────────────>│ │
│ │ 菜单树 │ │
│ │<───────────────│ │
│ │ 生成动态路由 │ │
│ 跳转首页 │ │ │
│<───────────────│ │ │
```
### 2.2 Token 刷新流程
```
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 前端 │ │ 后端 │ │ 数据库 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ API请求 │ │
│ (AccessToken) │ │
│───────────────>│ │
│ │ │
│ 401 Token过期 │ │
│<───────────────│ │
│ │ │
│ 刷新Token请求 │ │
│ (RefreshToken)│ │
│───────────────>│ │
│ │ 验证Token │
│ │───────────────>│
│ │ Token有效 │
│ │<───────────────│
│ │ 生成新Token │
│ │ 更新数据库 │
│ │───────────────>│
│ 新AccessToken │ │
│ 新RefreshToken│ │
│<───────────────│ │
│ │ │
│ 重试原请求 │ │
│───────────────>│ │
│ 正常响应 │ │
│<───────────────│ │
```
### 2.3 登出流程
```
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户 │ │ 前端 │ │ 后端 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ 点击退出 │ │
│───────────────>│ │
│ │ 调用登出API │
│ │───────────────>│
│ │ │ 撤销RefreshToken
│ │ 成功 │
│ │<───────────────│
│ │ │
│ │ 清除本地Token │
│ │ 重置路由状态 │
│ 跳转登录页 │ │
│<───────────────│ │
```
---
## 三、RBAC 权限管理流程
### 3.1 权限模型关系
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ RBAC 权限模型 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ AdminUser│ N:N │ Role │ N:N │ Menu │ │
│ │ 管理员 │────────>│ 角色 │────────>│ 菜单 │ │
│ └────┬─────┘ └────┬─────┘ └──────────┘ │
│ │ │ │
│ │ N:1 │ N:N │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │Department│ │Permission│ │
│ │ 部门 │ │ 权限 │ │
│ └────┬─────┘ └──────────┘ │
│ │ │
│ │ N:N │
│ ▼ │
│ ┌──────────┐ │
│ │ Menu │ (部门可分配专属菜单) │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
权限来源优先级:用户专属菜单 > 角色菜单 > 部门菜单
```
### 3.2 用户菜单获取流程
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 用户菜单权限计算流程 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 获取用户 │ │
│ │ 基本信息 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 用户专属菜单│ │ 用户角色 │ │ 用户部门 │ │
│ │ (直接分配) │ │ 的菜单权限 │ │ 的菜单权限 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 合并去重 │ │
│ │ 构建菜单树 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 返回用户 │ │
│ │ 可访问菜单 │ │
│ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 四、管理员用户管理流程
### 4.1 创建管理员流程
```
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 操作员 │ │ 前端 │ │ 后端 │ │ 数据库 │
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │ │
│ 1. 进入用户 │ │ │
│ 管理页面 │ │ │
│───────────────>│ │ │
│ │ 获取用户列表 │ │
│ │───────────────>│ │
│ │ │───────────────>│
│ │ 用户列表 │ │
│ │<───────────────│<───────────────│
│ 显示列表 │ │ │
│<───────────────│ │ │
│ │ │ │
│ 2. 点击新增 │ │ │
│───────────────>│ │ │
│ 弹出表单 │ │ │
│<───────────────│ │ │
│ │ │ │
│ 3. 填写信息 │ │ │
│ - 用户名 │ │ │
│ - 密码 │ │ │
│ - 真实姓名 │ │ │
│ - 邮箱/手机 │ │ │
│ - 部门 │ │ │
│ - 状态 │ │ │
│───────────────>│ │ │
│ │ 4. 提交创建 │ │
│ │───────────────>│ │
│ │ │ 检查用户名 │
│ │ │ 是否重复 │
│ │ │───────────────>│
│ │ │ │
│ │ │ 密码加密 │
│ │ │ 创建用户 │
│ │ │───────────────>│
│ │ 创建成功 │ │
│ │<───────────────│ │
│ 刷新列表 │ │ │
│<───────────────│ │ │
```
### 4.2 分配角色流程
```
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 操作员 │ │ 前端 │ │ 后端 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ 点击分配角色 │ │
│───────────────>│ │
│ │ 获取所有角色 │
│ │───────────────>│
│ │ 角色列表 │
│ │<───────────────│
│ │ │
│ │ 获取用户已有 │
│ │ 角色 │
│ │───────────────>│
│ │ 已分配角色ID │
│ │<───────────────│
│ │ │
│ 显示角色选择 │ │
│ (已选中已有) │ │
│<───────────────│ │
│ │ │
│ 勾选/取消角色 │ │
│───────────────>│ │
│ │ 提交角色分配 │
│ │───────────────>│
│ │ │ 更新用户角色
│ │ 分配成功 │ 关联表
│ │<───────────────│
│ 提示成功 │ │
│<───────────────│ │
```
---
## 五、角色管理流程
### 5.1 角色 CRUD 流程
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 角色管理操作 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 角色列表页面 │ │
│ │ ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ │ │
│ │ │ 角色名称│ 角色编码│ 描述 │ 状态 │ 排序 │ 操作 │ │ │
│ │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ │
│ │ │超级管理员│ admin │ 最高权限│ 启用 │ 1 │编辑|删除│ │ │
│ │ │运营人员 │ operator│ 运营管理│ 启用 │ 2 │编辑|删除│ │ │
│ │ │客服人员 │ service │ 客服处理│ 启用 │ 3 │编辑|删除│ │ │
│ │ └─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ 操作流程: │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 新增 │───>│ 填写 │───>│ 保存 │───>│ 刷新 │ │
│ │ 角色 │ │ 表单 │ │ 数据 │ │ 列表 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 编辑 │───>│ 加载 │───>│ 修改 │───>│ 保存 │ │
│ │ 角色 │ │ 数据 │ │ 表单 │ │ 更新 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 删除 │───>│ 确认 │───>│ 执行 │ (检查是否有用户使用该角色) │
│ │ 角色 │ │ 弹窗 │ │ 删除 │ │
│ └────────┘ └────────┘ └────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 5.2 角色分配菜单流程
```
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 操作员 │ │ 前端 │ │ 后端 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ 点击分配菜单 │ │
│───────────────>│ │
│ │ 获取菜单树 │
│ │───────────────>│
│ │ 完整菜单树 │
│ │<───────────────│
│ │ │
│ │ 获取角色已有 │
│ │ 菜单 │
│ │───────────────>│
│ │ 已分配菜单ID │
│ │<───────────────│
│ │ │
│ 显示菜单树 │ │
│ (勾选已分配) │ │
│<───────────────│ │
│ │ │
│ 勾选菜单节点 │ │
│ (支持全选/ │ │
│ 半选状态) │ │
│───────────────>│ │
│ │ 提交菜单分配 │
│ │───────────────>│
│ │ │ 更新角色菜单
│ │ 分配成功 │ 关联表
│ │<───────────────│
│ 提示成功 │ │
│<───────────────│ │
```
### 5.3 角色分配权限流程
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 角色权限分配界面 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 角色:运营人员 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 权限模块 权限项 │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ 用户管理 ☑ 查看用户 ☑ 创建用户 ☐ 删除用户 │ │
│ │ 角色管理 ☑ 查看角色 ☐ 创建角色 ☐ 删除角色 │ │
│ │ 菜单管理 ☑ 查看菜单 ☐ 创建菜单 ☐ 删除菜单 │ │
│ │ 部门管理 ☑ 查看部门 ☐ 创建部门 ☐ 删除部门 │ │
│ │ 日志管理 ☑ 查看日志 ☐ 导出日志 │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ [保存] [取消] │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 六、菜单管理流程
### 6.1 菜单类型说明
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 菜单类型 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 类型1: 目录 (Directory) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 📁 系统管理 │ │
│ │ ├── 📄 用户管理 │ │
│ │ ├── 📄 角色管理 │ │
│ │ └── 📄 菜单管理 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ - 不对应具体页面,仅作为分组容器 │
│ - 有 path 但无 component │
│ │
│ 类型2: 菜单 (Menu) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 📄 用户管理 → /system/user → system/user/index │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ - 对应具体页面 │
│ - 有 path 和 component │
│ │
│ 类型3: 按钮 (Button) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 🔘 新增用户 → permission: "system:user:create" │ │
│ │ 🔘 删除用户 → permission: "system:user:delete" │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ - 不显示在菜单中 │
│ - 用于按钮级权限控制 │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 6.2 菜单树结构示例
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 后台菜单树结构 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 📊 控制台 (Dashboard) │
│ └── 📄 首页 (/dashboard) │
│ │
│ 📁 系统管理 (/system) │
│ ├── 📄 用户管理 (/system/user) │
│ │ ├── 🔘 新增用户 (system:user:create) │
│ │ ├── 🔘 编辑用户 (system:user:update) │
│ │ ├── 🔘 删除用户 (system:user:delete) │
│ │ ├── 🔘 分配角色 (system:user:assign-role) │
│ │ └── 🔘 重置密码 (system:user:reset-password) │
│ │ │
│ ├── 📄 角色管理 (/system/role) │
│ │ ├── 🔘 新增角色 (system:role:create) │
│ │ ├── 🔘 编辑角色 (system:role:update) │
│ │ ├── 🔘 删除角色 (system:role:delete) │
│ │ └── 🔘 分配菜单 (system:role:assign-menu) │
│ │ │
│ ├── 📄 菜单管理 (/system/menu) │
│ │ ├── 🔘 新增菜单 (system:menu:create) │
│ │ ├── 🔘 编辑菜单 (system:menu:update) │
│ │ └── 🔘 删除菜单 (system:menu:delete) │
│ │ │
│ ├── 📄 部门管理 (/system/department) │
│ │ ├── 🔘 新增部门 (system:department:create) │
│ │ ├── 🔘 编辑部门 (system:department:update) │
│ │ └── 🔘 删除部门 (system:department:delete) │
│ │ │
│ ├── 📄 权限管理 (/system/permission) │
│ │ │
│ └── 📄 操作日志 (/system/log) │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 七、部门管理流程
### 7.1 部门树结构
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 部门组织架构 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 🏢 总公司 (HQ) │
│ │ │
│ ├── 🏬 运营部 (OPS) │
│ │ ├── 👥 运营一组 │
│ │ └── 👥 运营二组 │
│ │ │
│ ├── 🏬 技术部 (TECH) │
│ │ ├── 👥 前端组 │
│ │ ├── 👥 后端组 │
│ │ └── 👥 测试组 │
│ │ │
│ ├── 🏬 客服部 (CS) │
│ │ ├── 👥 售前客服 │
│ │ └── 👥 售后客服 │
│ │ │
│ └── 🏬 财务部 (FIN) │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 7.2 部门与菜单关联
```
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 操作员 │ │ 前端 │ │ 后端 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ 选择部门 │ │
│ 点击分配菜单 │ │
│───────────────>│ │
│ │ 获取菜单树 │
│ │───────────────>│
│ │ 菜单树 │
│ │<───────────────│
│ │ │
│ │ 获取部门已有 │
│ │ 菜单 │
│ │───────────────>│
│ │ 已分配菜单ID │
│ │<───────────────│
│ │ │
│ 显示菜单树 │ │
│ 勾选部门菜单 │ │
│<───────────────│ │
│ │ │
│ 保存分配 │ │
│───────────────>│ │
│ │ 提交分配 │
│ │───────────────>│
│ │ 成功 │
│ │<───────────────│
│ 提示成功 │ │
│<───────────────│ │
说明:部门菜单是该部门下所有用户的基础菜单权限
```
---
## 八、操作日志流程
### 8.1 日志记录流程
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 操作日志记录机制 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ API 请求 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────────────────────────────────┐ │
│ │ 权限过滤器 │────>│ [OperationLog] 特性标记的接口 │ │
│ └──────┬──────┘ └─────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 执行业务 │ │
│ │ 逻辑 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 日志过滤器 │ 记录: │
│ │ (After) │ - 用户ID/用户名 │
│ │ │ - 模块名称 │
│ │ │ - 操作类型 │
│ │ │ - 请求方法/URL │
│ │ │ - 请求参数 │
│ │ │ - IP地址 │
│ │ │ - UserAgent │
│ │ │ - 执行时长 │
│ │ │ - 执行状态 │
│ │ │ - 错误信息(如有) │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 异步写入 │ │
│ │ 数据库 │ │
│ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 8.2 日志查询界面
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 操作日志查询 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 筛选条件: │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 关键词搜索 │ │ 模块筛选 │ │ 开始日期 │ │ 结束日期 │ [查询] │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 操作人 │ 模块 │ 操作 │ 方法 │ URL │ 状态 │ 时间 │ │
│ ├────────┼────────┼────────┼──────┼────────────┼──────┼─────────┤ │
│ │ admin │用户管理│创建用户│ POST │/admin/users│ 成功 │10:30:25 │ │
│ │ admin │角色管理│分配菜单│ PUT │/admin/roles│ 成功 │10:28:15 │ │
│ │ ops01 │用户管理│重置密码│ PUT │/admin/users│ 成功 │10:25:00 │ │
│ │ admin │登录认证│用户登录│ POST │/admin/login│ 成功 │10:20:30 │ │
│ └────────┴────────┴────────┴──────┴────────────┴──────┴─────────┘ │
│ │
│ < 1 2 3 4 5 ... 10 > │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 九、前端动态路由生成流程
### 9.1 路由生成流程
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 前端动态路由生成 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 用户登录 │ │
│ │ 成功 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 调用 │ GET /admin/menus/user │
│ │ getUserMenus│ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 后端返回 │ 返回用户可访问的菜单树 │
│ │ 菜单树 │ (合并角色+部门+用户专属菜单) │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 遍历菜单树 │ 跳过 menuType=3 (按钮) │
│ │ 生成路由 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 路由转换规则: │ │
│ │ │ │
│ │ 菜单数据 路由配置 │ │
│ │ ───────── ───────── │ │
│ │ parentId: 0 component: Layout │ │
│ │ path: "/system" → path: "/system" │ │
│ │ name: "系统管理" meta: { title: "系统管理" } │ │
│ │ │ │
│ │ parentId: 1 component: () => import(...) │ │
│ │ path: "user" → path: "user" │ │
│ │ component: "system/user" meta: { title: "用户管理" } │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ router. │ 动态添加路由 │
│ │ addRoute() │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 添加 404 │ 兜底路由 │
│ │ 路由 │ path: '/:pathMatch(.*)*' │
│ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 十、权限控制流程
### 10.1 后端 API 权限控制
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 后端权限控制流程 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ API 请求 │ │
│ │ (带Token) │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ JWT 认证 │ 验证 Token 有效性 │
│ │ 中间件 │ 解析用户信息 │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────────────────────────────────┐ │
│ │ 权限过滤器 │────>│ [AdminPermission("system:user:create")]│ │
│ │ │ │ 检查用户是否拥有该权限 │ │
│ └──────┬──────┘ └─────────────────────────────────────────┘ │
│ │ │
│ │ 有权限 │
│ ▼ │
│ ┌─────────────┐ │
│ │ 执行业务 │ │
│ │ Controller │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 返回结果 │ │
│ └─────────────┘ │
│ │
│ 无权限时: │
│ ┌─────────────┐ │
│ │ 返回 403 │ { code: 403, message: "无权限访问" } │
│ │ Forbidden │ │
│ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 10.2 前端按钮权限控制
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 前端按钮权限控制 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 方式1: v-permission 指令 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ <el-button v-permission="'system:user:create'">新增用户</el-button>│ │
│ │ │ │
│ │ // 指令实现 │ │
│ │ if (!userPermissions.includes(permission)) { │ │
│ │ el.parentNode?.removeChild(el) // 移除元素 │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ 方式2: hasPermission 函数 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ <el-button v-if="hasPermission('system:user:delete')"> │ │
│ │ 删除用户 │ │
│ │ </el-button> │ │
│ │ │ │
│ │ // 函数实现 │ │
│ │ const hasPermission = (permission: string) => { │ │
│ │ return userStore.permissions.includes(permission) │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ 权限数据来源: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 登录响应 → userInfo.permissions → ['system:user:create', ...] │ │
│ │ 存储到 userStore.permissions │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 十一、完整业务操作示例
### 11.1 新增运营人员完整流程
```
┌──────────────────────────────────────────────────────────────────────────┐
│ 新增运营人员完整操作流程 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 步骤1: 创建角色 (如果不存在) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 系统管理 → 角色管理 → 新增 │ │
│ │ - 角色名称: 运营人员 │ │
│ │ - 角色编码: operator │ │
│ │ - 状态: 启用 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步骤2: 为角色分配菜单权限 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 角色列表 → 运营人员 → 分配菜单 │ │
│ │ 勾选: ☑ 控制台 ☑ 用户管理(查看) ☑ 订单管理 ☑ 商品管理 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步骤3: 创建管理员账号 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 系统管理 → 用户管理 → 新增 │ │
│ │ - 用户名: ops001 │ │
│ │ - 密码: ******** │ │
│ │ - 真实姓名: 张三 │ │
│ │ - 部门: 运营部 │ │
│ │ - 状态: 启用 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步骤4: 为用户分配角色 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 用户列表 → ops001 → 分配角色 │ │
│ │ 勾选: ☑ 运营人员 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步骤5: 用户登录验证 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ ops001 登录后只能看到: │ │
│ │ - 控制台 │ │
│ │ - 用户管理 (仅查看) │ │
│ │ - 订单管理 │ │
│ │ - 商品管理 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 十二、系统数据流总览
```
┌──────────────────────────────────────────────────────────────────────────────────────┐
│ HoneyBox Admin 数据流总览 │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 前端 (Vue3 + Element Plus) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Views │ │ Store │ │ Router │ │ API │ │ Utils │ │ │
│ │ │ 页面 │ │ 状态 │ │ 路由 │ │ 接口 │ │ 工具 │ │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │
│ │ │ │ │ │ │ │ │
│ │ └─────────────┴─────────────┴──────┬──────┴─────────────┘ │ │
│ └──────────────────────────────────────────┼──────────────────────────────────┘ │
│ │ │
│ │ HTTP/HTTPS │
│ │ (JWT Bearer) │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ 后端 (ASP.NET Core) │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Controllers 层 │ │ │
│ │ │ AuthController │ AdminUserController │ RoleController │ ... │ │ │
│ │ └────────────────────────────────────────────────────────────────┬─────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Filters 层 │ │ │
│ │ │ AdminAuthFilter │ AdminPermissionAttribute │ OperationLogAttribute│ │ │
│ │ └────────────────────────────────────────────────────────────────┬─────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Services 层 │ │ │
│ │ │ AuthService │ AdminUserService │ RoleService │ MenuService │ ...│ │ │
│ │ └────────────────────────────────────────────────────────────────┬─────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Data 层 │ │ │
│ │ │ AdminDbContext (EF Core) │ │ │
│ │ └────────────────────────────────────────────────────────────────┬─────┘ │ │
│ └──────────────────────────────────────────────────────────────────┼──────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ SQL Server 数据库 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │admin_users │ │ roles │ │ menus │ │departments │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ user_roles │ │role_menus │ │permissions │ │refresh_tokens│ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
│ │ ┌────────────┐ ┌────────────┐ │ │
│ │ │operation_ │ │dept_menus │ │ │
│ │ │ logs │ │ │ │ │
│ │ └────────────┘ └────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────────┘
```
---
## 十三、API 接口清单
| 模块 | 接口 | 方法 | 说明 |
|------|------|------|------|
| 认证 | /admin/auth/captcha | POST | 获取验证码 |
| 认证 | /admin/auth/login | POST | 登录 |
| 认证 | /admin/auth/refresh | POST | 刷新Token |
| 认证 | /admin/auth/logout | POST | 登出 |
| 认证 | /admin/auth/info | GET | 获取当前用户信息 |
| 认证 | /admin/auth/password | PUT | 修改密码 |
| 用户 | /admin/users | GET | 用户列表(分页) |
| 用户 | /admin/users | POST | 创建用户 |
| 用户 | /admin/users/{id} | GET | 用户详情 |
| 用户 | /admin/users/{id} | PUT | 更新用户 |
| 用户 | /admin/users/{id} | DELETE | 删除用户 |
| 用户 | /admin/users/{id}/roles | GET/PUT | 用户角色 |
| 用户 | /admin/users/{id}/menus | GET/PUT | 用户专属菜单 |
| 角色 | /admin/roles | GET | 角色列表(分页) |
| 角色 | /admin/roles/all | GET | 所有角色 |
| 角色 | /admin/roles | POST | 创建角色 |
| 角色 | /admin/roles/{id} | PUT | 更新角色 |
| 角色 | /admin/roles/{id} | DELETE | 删除角色 |
| 角色 | /admin/roles/{id}/menus | GET/PUT | 角色菜单 |
| 角色 | /admin/roles/{id}/permissions | GET/PUT | 角色权限 |
| 菜单 | /admin/menus | GET | 菜单树 |
| 菜单 | /admin/menus/user | GET | 当前用户菜单 |
| 菜单 | /admin/menus | POST | 创建菜单 |
| 菜单 | /admin/menus/{id} | PUT | 更新菜单 |
| 菜单 | /admin/menus/{id} | DELETE | 删除菜单 |
| 部门 | /admin/departments | GET | 部门树 |
| 部门 | /admin/departments | POST | 创建部门 |
| 部门 | /admin/departments/{id} | PUT | 更新部门 |
| 部门 | /admin/departments/{id} | DELETE | 删除部门 |
| 部门 | /admin/departments/{id}/menus | GET/PUT | 部门菜单 |
| 权限 | /admin/permissions | GET | 权限列表 |
| 权限 | /admin/permissions/by-module | GET | 按模块分组 |
| 权限 | /admin/permissions | POST | 创建权限 |
| 权限 | /admin/permissions/{id} | PUT | 更新权限 |
| 权限 | /admin/permissions/{id} | DELETE | 删除权限 |
| 日志 | /admin/logs | GET | 操作日志列表 |
| 日志 | /admin/logs/{id} | GET | 日志详情 |
---
## 十四、总结
HoneyBox 后台管理系统是一个完整的 RBAC 权限管理系统,核心功能包括:
1. **双 Token 认证**AccessToken + RefreshToken支持无感刷新
2. **图形验证码**:防止暴力破解
3. **多维度权限**:用户 → 角色 → 菜单/权限,支持部门级和用户级专属菜单
4. **动态路由**:根据用户权限动态生成前端路由
5. **操作日志**:完整记录用户操作行为
6. **按钮级权限**:前后端双重权限校验