HaniBlindBox/docs/后台管理系统迁移计划.md
2026-01-03 22:57:16 +08:00

24 KiB
Raw Blame History

HoneyBox 后台管理系统迁移计划

一、迁移概述

1.1 迁移目标

将 PHP (ThinkPHP 6.0) 后台管理系统迁移至 ASP.NET Core采用前后端分离架构实现现代化的后台管理系统。

1.2 迁移策略

  • 基础先行:先搭建权限管理框架(登录、菜单、角色、权限),再逐步迁移业务模块
  • 后端分离:新建独立类库 HoneyBox.Admin 处理后台 API
  • 数据库分离:独立的后台管理数据库 honey_box_admin,与业务库解耦
  • 渐进式迁移:按模块逐个迁移,降低风险

二、架构设计

2.1 整体架构

┌─────────────────────────────────────────────────────────────────────────────┐
│                              前端应用层                                      │
│  ┌─────────────────────────────┐    ┌─────────────────────────────────────┐ │
│  │  UniApp (小程序/H5/APP)      │    │  Vue3 + Element Plus (后台管理)     │ │
│  │  用户端前端                  │    │  管理端前端                         │ │
│  └─────────────────────────────┘    └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
                │                                      │
                ▼                                      ▼
┌───────────────────────────────┐    ┌─────────────────────────────────────────┐
│        HoneyBox.Api           │    │           HoneyBox.Admin                │
│        (用户端 API)            │    │      (后台管理 - 独立可复用项目)         │
│  ┌─────────────────────────┐  │    │  ┌─────────────────────────────────┐   │
│  │  /api/* (用户端接口)     │  │    │  │  Controllers/ (后台管理 API)    │   │
│  └─────────────────────────┘  │    │  │  Services/    (业务逻辑层)       │   │
│              │                │    │  │  Entities/    (数据实体)         │   │
│              ▼                │    │  │  Models/      (DTO/ViewModel)   │   │
│  ┌─────────────────────────┐  │    │  │  Data/        (DbContext)       │   │
│  │     HoneyBox.Core       │  │    │  └─────────────────────────────────┘   │
│  │     (用户端业务逻辑)     │  │    │                  │                     │
│  └─────────────────────────┘  │    │                  │ (可选引用)           │
│              │                │    │                  ▼                     │
│              ▼                │    │  ┌─────────────────────────────────┐   │
│  ┌─────────────────────────┐  │    │  │  HoneyBox.Core (业务数据查询)   │   │
│  │     HoneyBox.Model      │  │    │  │  HoneyBox.Model (业务实体)      │   │
│  │     (业务数据模型)       │  │    │  └─────────────────────────────────┘   │
│  └─────────────────────────┘  │    └─────────────────────────────────────────┘
│              │                │                       │
│              ▼                │                       ▼
│  ┌─────────────────────────┐  │    ┌─────────────────────────────────────────┐
│  │      honey_box          │  │    │           honey_box_admin               │
│  │      (业务数据库)        │  │    │         (后台管理数据库)                 │
│  └─────────────────────────┘  │    └─────────────────────────────────────────┘
└───────────────────────────────┘

2.2 HoneyBox.Admin 设计理念

HoneyBox.Admin 是一个独立可复用的后台管理模块,具有以下特点:

  1. 自包含 - 内部包含 Entities、Services、DbContext不依赖外部 Model 层
  2. 可移植 - 可以轻松复制到其他项目中使用
  3. 松耦合 - 通过可选引用 HoneyBox.Core/Model 来访问业务数据
  4. 独立数据库 - 使用独立的 honey_box_admin 数据库

2.3 项目结构

HoneyBox.sln
├── src/
│   ├── HoneyBox.Api/                    # 用户端 API (现有)
│   │   ├── Controllers/                 # 用户端控制器
│   │   └── Filters/
│   │
│   ├── HoneyBox.Admin/                  # 后台管理 (新增 - 独立可复用项目)
│   │   ├── Controllers/                 # 后台管理 API 控制器
│   │   │   ├── AuthController.cs        # 登录认证
│   │   │   ├── MenuController.cs        # 菜单管理
│   │   │   ├── RoleController.cs        # 角色管理
│   │   │   ├── AdminUserController.cs   # 管理员管理
│   │   │   ├── PermissionController.cs  # 权限管理
│   │   │   └── Business/                # 业务模块控制器 (迁移后)
│   │   │       ├── UserController.cs    # 用户管理
│   │   │       ├── GoodsController.cs   # 商品管理
│   │   │       ├── OrderController.cs   # 订单管理
│   │   │       └── ...
│   │   │
│   │   ├── Services/                    # 业务服务层
│   │   │   ├── Interfaces/              # 接口定义
│   │   │   │   ├── IAuthService.cs
│   │   │   │   ├── IMenuService.cs
│   │   │   │   ├── IRoleService.cs
│   │   │   │   └── ...
│   │   │   ├── AuthService.cs           # 认证服务
│   │   │   ├── MenuService.cs           # 菜单服务
│   │   │   ├── RoleService.cs           # 角色服务
│   │   │   ├── PermissionService.cs     # 权限服务
│   │   │   └── AdminUserService.cs      # 管理员服务
│   │   │
│   │   ├── Entities/                    # 数据实体 (后台管理专用)
│   │   │   ├── AdminUser.cs             # 管理员
│   │   │   ├── Role.cs                  # 角色
│   │   │   ├── Menu.cs                  # 菜单
│   │   │   ├── Permission.cs            # 权限
│   │   │   ├── AdminUserRole.cs         # 管理员-角色关联
│   │   │   ├── RoleMenu.cs              # 角色-菜单关联
│   │   │   ├── RolePermission.cs        # 角色-权限关联
│   │   │   └── OperationLog.cs          # 操作日志
│   │   │
│   │   ├── Models/                      # DTO / ViewModel
│   │   │   ├── Auth/                    # 认证相关
│   │   │   │   ├── LoginRequest.cs
│   │   │   │   ├── LoginResponse.cs
│   │   │   │   └── AdminUserInfo.cs
│   │   │   ├── Menu/                    # 菜单相关
│   │   │   ├── Role/                    # 角色相关
│   │   │   └── Common/                  # 通用模型
│   │   │       ├── PagedRequest.cs
│   │   │       └── ApiResponse.cs
│   │   │
│   │   ├── Data/                        # 数据访问层
│   │   │   └── AdminDbContext.cs        # 后台管理数据库上下文
│   │   │
│   │   ├── Filters/                     # 过滤器
│   │   │   ├── AdminAuthFilter.cs       # 后台认证过滤器
│   │   │   └── PermissionFilter.cs      # 权限验证过滤器
│   │   │
│   │   ├── Extensions/                  # 扩展方法
│   │   │   └── ServiceCollectionExtensions.cs  # DI 注册扩展
│   │   │
│   │   └── HoneyBox.Admin.csproj
│   │
│   ├── HoneyBox.Core/                   # 用户端业务层 (现有)
│   ├── HoneyBox.Model/                  # 用户端数据层 (现有)
│   └── HoneyBox.Infrastructure/         # 基础设施层 (现有)
│
└── tests/
    └── HoneyBox.Admin.Tests/            # 后台管理测试 (新增)

2.4 项目依赖关系

HoneyBox.Admin (独立可复用)
    │
    ├── 自包含: Entities, Services, Models, DbContext
    │
    └── 可选引用 (访问业务数据时):
        ├── HoneyBox.Core   (业务逻辑复用)
        └── HoneyBox.Model  (业务实体查询)

复用到其他项目时:

  • 只需复制 HoneyBox.Admin 项目
  • 修改 AdminDbContext 连接字符串
  • 移除对 HoneyBox.Core/Model 的引用(如果不需要)
  • 即可获得完整的后台管理功能

三、数据库设计

3.1 数据库分离策略

数据库 用途 说明
honey_box 业务数据库 用户、商品、订单等业务数据
honey_box_admin 后台管理数据库 管理员、角色、菜单、权限、日志

3.2 后台管理数据库表设计

3.2.1 管理员表 (admin_users)

CREATE TABLE admin_users (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    username        NVARCHAR(50) NOT NULL UNIQUE,      -- 用户名
    password_hash   NVARCHAR(256) NOT NULL,            -- 密码哈希
    real_name       NVARCHAR(50),                      -- 真实姓名
    avatar          NVARCHAR(500),                     -- 头像
    email           NVARCHAR(100),                     -- 邮箱
    phone           NVARCHAR(20),                      -- 手机号
    status          TINYINT DEFAULT 1,                 -- 状态: 0禁用 1启用
    last_login_time DATETIME2,                         -- 最后登录时间
    last_login_ip   NVARCHAR(50),                      -- 最后登录IP
    created_at      DATETIME2 DEFAULT GETDATE(),
    updated_at      DATETIME2,
    created_by      BIGINT,                            -- 创建人
    remark          NVARCHAR(500)                      -- 备注
);

3.2.2 角色表 (roles)

CREATE TABLE roles (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    name            NVARCHAR(50) NOT NULL UNIQUE,      -- 角色名称
    code            NVARCHAR(50) NOT NULL UNIQUE,      -- 角色编码
    description     NVARCHAR(200),                     -- 描述
    sort_order      INT DEFAULT 0,                     -- 排序
    status          TINYINT DEFAULT 1,                 -- 状态: 0禁用 1启用
    is_system       BIT DEFAULT 0,                     -- 是否系统角色(不可删除)
    created_at      DATETIME2 DEFAULT GETDATE(),
    updated_at      DATETIME2
);

3.2.3 菜单表 (menus)

CREATE TABLE menus (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    parent_id       BIGINT DEFAULT 0,                  -- 父级ID
    name            NVARCHAR(50) NOT NULL,             -- 菜单名称
    path            NVARCHAR(200),                     -- 路由路径
    component       NVARCHAR(200),                     -- 组件路径
    icon            NVARCHAR(100),                     -- 图标
    menu_type       TINYINT DEFAULT 1,                 -- 类型: 1目录 2菜单 3按钮
    permission      NVARCHAR(100),                     -- 权限标识
    sort_order      INT DEFAULT 0,                     -- 排序
    status          TINYINT DEFAULT 1,                 -- 状态: 0隐藏 1显示
    is_external     BIT DEFAULT 0,                     -- 是否外链
    is_cache        BIT DEFAULT 1,                     -- 是否缓存
    created_at      DATETIME2 DEFAULT GETDATE(),
    updated_at      DATETIME2
);

3.2.4 权限表 (permissions)

CREATE TABLE permissions (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    name            NVARCHAR(50) NOT NULL,             -- 权限名称
    code            NVARCHAR(100) NOT NULL UNIQUE,     -- 权限编码 (如: user:list, user:add)
    module          NVARCHAR(50),                      -- 所属模块
    description     NVARCHAR(200),                     -- 描述
    created_at      DATETIME2 DEFAULT GETDATE()
);

3.2.5 关联表

-- 管理员-角色关联
CREATE TABLE admin_user_roles (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    admin_user_id   BIGINT NOT NULL,
    role_id         BIGINT NOT NULL,
    UNIQUE(admin_user_id, role_id)
);

-- 角色-菜单关联
CREATE TABLE role_menus (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    role_id         BIGINT NOT NULL,
    menu_id         BIGINT NOT NULL,
    UNIQUE(role_id, menu_id)
);

-- 角色-权限关联
CREATE TABLE role_permissions (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    role_id         BIGINT NOT NULL,
    permission_id   BIGINT NOT NULL,
    UNIQUE(role_id, permission_id)
);

3.2.6 操作日志表 (operation_logs)

CREATE TABLE operation_logs (
    id              BIGINT PRIMARY KEY IDENTITY(1,1),
    admin_user_id   BIGINT,                            -- 操作人ID
    username        NVARCHAR(50),                      -- 操作人用户名
    module          NVARCHAR(50),                      -- 操作模块
    action          NVARCHAR(50),                      -- 操作类型
    method          NVARCHAR(10),                      -- 请求方法
    url             NVARCHAR(500),                     -- 请求URL
    ip              NVARCHAR(50),                      -- IP地址
    request_data    NVARCHAR(MAX),                     -- 请求参数
    response_data   NVARCHAR(MAX),                     -- 响应数据
    status          TINYINT,                           -- 状态: 0失败 1成功
    error_msg       NVARCHAR(1000),                    -- 错误信息
    duration        INT,                               -- 耗时(ms)
    created_at      DATETIME2 DEFAULT GETDATE()
);

四、迁移阶段规划

阶段一:基础框架搭建 (预计 1-2 周)

4.1.1 目标

  • 创建后台管理相关项目
  • 搭建数据库和基础表
  • 实现登录认证

4.1.2 任务清单

序号 任务 说明 优先级
1 创建 HoneyBox.Admin 项目 独立可复用的后台管理项目 P0
2 创建 Entities 实体类 AdminUser, Role, Menu, Permission 等 P0
3 创建 AdminDbContext 后台管理数据库上下文 P0
4 创建 honey_box_admin 数据库 执行建表脚本 P0
5 实现管理员登录 API JWT 认证 P0
6 实现后台权限过滤器 基于角色/权限的访问控制 P0
7 创建 DI 扩展方法 AddHoneyBoxAdmin() 便于复用 P0
8 初始化超级管理员账号 默认 admin/admin123 P0

阶段二:权限管理模块 (预计 1-2 周)

4.2.1 目标

  • 实现完整的 RBAC 权限管理
  • 菜单、角色、权限的增删改查

4.2.2 任务清单

序号 任务 说明 优先级
1 菜单管理 CRUD 树形结构菜单 P0
2 角色管理 CRUD 角色分配菜单/权限 P0
3 管理员管理 CRUD 管理员分配角色 P0
4 权限管理 权限列表、分配 P1
5 操作日志 记录管理员操作 P1
6 登录日志 记录登录历史 P2

阶段三:业务模块迁移 (预计 4-6 周)

按优先级逐步迁移 PHP 后台的业务模块:

优先级 模块 PHP 控制器 说明
P0 首页仪表盘 Index 数据统计概览
P0 用户管理 User 用户列表、封禁、资金变动
P0 商品管理 Goods, GoodsType 盒子管理、奖品配置
P0 订单管理 Order 订单列表、发货、退款
P1 财务管理 Finance, Withdraw 资金流水、提现审核
P1 抽奖配置 Draw, Cardextractor 抽奖活动配置
P1 系统配置 Config 支付、上传等配置
P2 营销管理 Coupon, Reward, Rank 优惠券、奖励、排行榜
P2 内容管理 Advert, Danye, News 广告、单页、公告
P2 统计报表 Statistics 数据分析报表

五、技术选型

5.1 后端技术栈

技术 版本 用途
ASP.NET Core 8.0 Web API 框架
Entity Framework Core 8.0 ORM
SQL Server 2019+ 数据库
JWT - 身份认证
Serilog - 日志
Mapster 7.4 对象映射
Redis - 缓存、Token 存储

5.2 前端技术栈 (建议)

技术 版本 用途
Vue.js 3.x 前端框架
Element Plus 2.x UI 组件库
Vite 5.x 构建工具
Pinia 2.x 状态管理
Vue Router 4.x 路由
Axios 1.x HTTP 请求
ECharts 5.x 图表

六、API 设计规范

6.1 URL 规范

后台管理 API 统一前缀: /api/admin

认证相关:
POST   /api/admin/auth/login          # 登录
POST   /api/admin/auth/logout         # 登出
GET    /api/admin/auth/info           # 获取当前用户信息
POST   /api/admin/auth/refresh        # 刷新 Token

菜单管理:
GET    /api/admin/menus               # 菜单列表(树形)
GET    /api/admin/menus/{id}          # 菜单详情
POST   /api/admin/menus               # 新增菜单
PUT    /api/admin/menus/{id}          # 编辑菜单
DELETE /api/admin/menus/{id}          # 删除菜单

角色管理:
GET    /api/admin/roles               # 角色列表
GET    /api/admin/roles/{id}          # 角色详情
POST   /api/admin/roles               # 新增角色
PUT    /api/admin/roles/{id}          # 编辑角色
DELETE /api/admin/roles/{id}          # 删除角色
PUT    /api/admin/roles/{id}/menus    # 分配菜单
PUT    /api/admin/roles/{id}/permissions # 分配权限

管理员管理:
GET    /api/admin/users               # 管理员列表
GET    /api/admin/users/{id}          # 管理员详情
POST   /api/admin/users               # 新增管理员
PUT    /api/admin/users/{id}          # 编辑管理员
DELETE /api/admin/users/{id}          # 删除管理员
PUT    /api/admin/users/{id}/roles    # 分配角色
PUT    /api/admin/users/{id}/status   # 启用/禁用
PUT    /api/admin/users/{id}/password # 重置密码

6.2 响应格式

// 成功响应
{
    "code": 0,
    "message": "success",
    "data": { ... }
}

// 分页响应
{
    "code": 0,
    "message": "success",
    "data": {
        "list": [...],
        "total": 100,
        "page": 1,
        "pageSize": 20
    }
}

// 错误响应
{
    "code": 40001,
    "message": "用户名或密码错误",
    "data": null
}

6.3 错误码规范

错误码范围 说明
0 成功
40001-40099 认证相关错误
40101-40199 权限相关错误
40201-40299 参数验证错误
50001-50099 服务器内部错误

七、安全设计

7.1 认证机制

  • 使用 JWT Token 进行身份认证
  • Token 有效期 24 小时,支持刷新
  • 登录失败次数限制5次锁定30分钟
  • 支持多设备登录/单设备登录配置

7.2 权限控制

  • 基于 RBAC 模型
  • 接口级别权限控制(通过 [AdminPermission("user:list")] 特性)
  • 菜单级别权限控制(前端动态路由)
  • 按钮级别权限控制(前端指令 v-permission

7.3 安全措施

  • 密码使用 BCrypt 加密存储
  • 敏感操作记录操作日志
  • 支持 IP 白名单
  • 防止 SQL 注入EF Core 参数化查询)
  • 防止 XSS 攻击(输入过滤)

八、HoneyBox.Admin 与业务系统的关系

8.1 数据库关系

honey_box (业务库)              honey_box_admin (后台管理库)
┌─────────────────┐            ┌─────────────────┐
│ users           │◄───────────│ admin_users     │ (通过 user_id 关联查询)
│ goods           │            │ roles           │
│ orders          │            │ menus           │
│ order_list      │            │ permissions     │
│ ...             │            │ operation_logs  │
└─────────────────┘            └─────────────────┘

8.2 代码引用关系

// HoneyBox.Admin.csproj
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>
  
  <!-- 自包含的依赖 -->
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
    <PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
    <PackageReference Include="Mapster" Version="7.4.0" />
  </ItemGroup>
  
  <!-- 可选: 引用业务层访问业务数据 -->
  <ItemGroup Condition="'$(IncludeBusinessLayer)' == 'true'">
    <ProjectReference Include="..\HoneyBox.Core\HoneyBox.Core.csproj" />
    <ProjectReference Include="..\HoneyBox.Model\HoneyBox.Model.csproj" />
  </ItemGroup>
</Project>

8.3 复用到其他项目

当需要将 HoneyBox.Admin 复用到其他项目时:

  1. 复制项目 - 将 HoneyBox.Admin 文件夹复制到新项目
  2. 修改命名空间 - 可选,根据新项目命名规范调整
  3. 配置数据库 - 修改 appsettings.json 中的连接字符串
  4. 移除业务引用 - 删除对 HoneyBox.Core/Model 的引用
  5. 注册服务 - 在新项目的 Program.cs 中调用扩展方法
// 新项目中使用
builder.Services.AddHoneyBoxAdmin(options =>
{
    options.ConnectionString = "your-connection-string";
    options.JwtSecret = "your-jwt-secret";
});

九、前端管理系统 (后续规划)

9.1 推荐方案

使用 Vue3 + Element Plus 构建现代化管理后台,可选择:

  1. 从零搭建 - 完全自定义,灵活度高
  2. 使用模板 - 如 vue-element-admin、vue-vben-admin

9.2 目录结构 (建议)

admin-web/
├── src/
│   ├── api/              # API 接口
│   ├── assets/           # 静态资源
│   ├── components/       # 公共组件
│   ├── layout/           # 布局组件
│   ├── router/           # 路由配置
│   ├── store/            # 状态管理
│   ├── utils/            # 工具函数
│   └── views/            # 页面组件
│       ├── login/        # 登录页
│       ├── dashboard/    # 首页仪表盘
│       ├── system/       # 系统管理
│       │   ├── menu/     # 菜单管理
│       │   ├── role/     # 角色管理
│       │   └── user/     # 管理员管理
│       └── business/     # 业务模块
├── package.json
└── vite.config.js

十、下一步行动

  1. 确认本文档 - 确认架构设计和迁移策略
  2. 创建项目结构 - 新建 HoneyBox.AdminHoneyBox.Admin.Model 项目
  3. 创建数据库 - 执行建表脚本创建 honey_box_admin 数据库
  4. 实现登录认证 - 完成管理员登录 API
  5. 实现权限框架 - 完成菜单、角色、权限管理

确认后我可以开始创建项目和代码。