# hei-gin
**Repository Path**: jiangbyte/hei-gin
## Basic Information
- **Project Name**: hei-gin
- **Description**: HEI Gin 是一个基于 Gin 的 Go Web 后端起步框架
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://jiangbyte.github.io/hei-gin/
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-14
- **Last Updated**: 2026-07-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Hei Gin




## 简介
**Hei Gin** 是 HEI 快速开发框架的 Go 单体应用版本,基于 Gin + Ent(entgo.io)构建。提供开箱即用的快速开发解决方案,包含完善的权限管理(RBAC)、数据权限、认证授权、文件存储(MinIO/S3/Local)、操作日志等功能模块。框架采用前后端分离架构,支持快速搭建后台管理系统和 API 服务。
**在线文档**: [https://jiangbyte.github.io/hei-gin/](https://jiangbyte.github.io/hei-gin/)
## 技术栈
| 类型 | 技术 |
| --- | --- |
| 核心框架 | Go 1.25+ / Gin 1.12+ |
| ORM | Ent (entgo.io) |
| 数据库 | MySQL 8.0+ |
| 缓存 | Redis 6.0+ (go-redis) |
| 认证授权 | JWT / SM2 国密加解密 / SM3 哈希 / bcrypt 密码哈希 |
| 文件存储 | MinIO / S3 (AWS SDK) / Local 本地存储 |
| IP 定位 | IP2Region 离线库 |
| 分布式ID | Snowflake ID (bwmarrin/snowflake) |
## 核心特性
- **双端认证体系** — B端(后台管理)和 C端(客户端)独立的两套 JWT 认证、权限中间件
- **SM2 国密加密** — 登录密码传输使用国密 SM2 C1C3C2 模式加密,支持 C1C2C3 / C1C3C2 双模式解密
- **SM3 哈希** — 支持 SM3 摘要算法,用于操作日志防篡改签名
- **bcrypt 密码哈希** — 存储密码使用 bcrypt 加盐哈希
- **RBAC 权限控制** — 用户→角色→权限 + 用户直授权限,双层模型
- **数据权限(行级)** — 支持 ALL / ORG / ORG_AND_BELOW / SELF / CUSTOM_ORG / GROUP / GROUP_AND_BELOW / CUSTOM_GROUP 等数据范围控制
- **权限自动发现** — 启动时自动扫描 `middleware.HeiCheckPermission` / `auth.RegisterPermission` 注册的权限并缓存到 Redis
- **权限匹配器** — 支持 `*` 单级和 `**` 多级通配符匹配
- **操作日志** — `SysLog` 中间件自动记录用户操作,支持请求参数、UA 解析、IP 归属地、SM3 签名防篡改
- **防重复提交** — `NoRepeat` 中间件防止接口重复调用(基于 Redis)
- **链路追踪** — 基于 `trace_id` 的全链路追踪,支持从请求头读取或自动生成
- **统一验证码** — B端/C端独立的图形验证码服务
- **统一响应格式** — `{code, message, data, success, trace_id}` 标准结构
- **全局异常处理** — Recovery 中间件统一捕获 BusinessException 返回业务错误码
- **抽象文件存储** — 统一的 `FileStorage` 接口,支持本地存储、MinIO、S3 三种后端,切换无需修改业务代码
- **IP 归属地** — 基于 IP2Region 离线库的 IP 地址定位
- **在线会话管理** — B端和 C端独立的会话管理,支持在线用户查看和强制下线
- **雪花ID** — 分布式 Snowflake ID 生成器
## 项目结构
```
hei-gin
├── config/
│ └── config.go # 配置结构体(YAML 加载)
├── core/ # 框架核心
│ ├── app/
│ │ ├── app.go # 应用工厂 + 核心服务初始化
│ │ ├── health.go # 健康检查 GET /
│ │ └── router.go # 路由注册总入口
│ ├── auth/
│ │ ├── auth_tool.go # B端 JWT 认证工具
│ │ ├── client_auth_tool.go # C端 JWT 认证工具
│ │ ├── permission_tool.go # 权限查询门面(HasPermission / CheckPermission)
│ │ ├── permission_matcher.go # 权限匹配器(支持 * / ** 通配符)
│ │ ├── permission_interface.go # 权限查询接口定义(直授 + 角色双路径)
│ │ ├── permission_interface_manager.go # 权限接口管理器
│ │ ├── permission_scan.go # 权限自动扫描与缓存
│ │ ├── middleware/
│ │ │ ├── check_login.go # B端登录检查中间件
│ │ │ ├── client_check_login.go # C端登录检查中间件
│ │ │ ├── check_permission.go # B端权限检查中间件(HeiCheckPermission)
│ │ │ ├── client_check_permission.go # C端权限检查中间件
│ │ │ ├── check_role.go # B端角色检查中间件
│ │ │ ├── client_check_role.go # C端角色检查中间件
│ │ │ └── norepeat.go # NoRepeat 防重复提交中间件
│ │ └── pojo/
│ │ ├── login_user_info.go # B端登录用户信息
│ │ └── login_client_user_info.go # C端登录用户信息
│ ├── captcha/
│ │ └── captcha.go # 图形验证码服务(B端/C端)
│ ├── constants/
│ │ ├── constants.go # 系统常量(SUPER_ADMIN_CODE)
│ │ ├── cache_keys.go # Redis 缓存键常量
│ │ └── base_fields.go # 系统基础字段定义
│ ├── db/
│ │ ├── ent.go # Ent 客户端初始化(MySQL)
│ │ └── redis.go # Redis 客户端初始化
│ ├── enums/
│ │ ├── permission.go # 登录类型、权限类别、数据范围、检查模式枚举
│ │ ├── status.go # 状态枚举(启用/禁用/锁定等)
│ │ ├── resource.go # 资源类型和类别枚举
│ │ └── page_data_field.go # 分页响应字段枚举
│ ├── exception/
│ │ └── business_error.go # BusinessException 业务异常
│ ├── log/
│ │ ├── syslog.go # SysLog 操作日志中间件
│ │ ├── record.go # RecordAuthLog 认证日志记录
│ │ └── utils.go # 日志工具(UA 解析、参数提取、SM3 签名)
│ ├── middleware/
│ │ ├── auth_check.go # JWT 认证中间件(按路径分流 B/C/Public)
│ │ ├── cors.go # CORS 中间件
│ │ ├── recovery.go # 全局异常恢复中间件
│ │ └── trace.go # 链路追踪中间件(trace_id)
│ ├── pojo/
│ │ ├── datetime_mixin.go # 时间日期混入结构
│ │ └── id_params.go # ID 参数结构
│ ├── result/
│ │ └── result.go # Success / Failure / Page 响应工具
│ ├── storage/
│ │ ├── interface.go # FileStorage 接口定义
│ │ ├── local.go # Local 本地文件存储
│ │ ├── minio.go # MinIO 对象存储
│ │ └── s3.go # AWS S3 对象存储
│ └── utils/
│ ├── crypto.go # SM2 加解密 + SM3 哈希 + bcrypt
│ ├── ip.go # 客户端 IP 提取 + IP2Region 城市查询
│ ├── model.go # 模型工具(系统字段剥离、更新)
│ ├── resolve.go # 层级路径解析工具
│ ├── snowflake.go # 雪花 ID 生成
│ ├── trace.go # 链路追踪 ID 生成
│ └── user_agent.go # 浏览器 / OS 解析
├── ent/ # Ent 生成的 ORM 模型与查询
│ ├── schema/ # Ent Schema 定义
│ │ ├── sysuser.go # 用户
│ │ ├── sysrole.go # 角色
│ │ ├── syspermission.go # 权限
│ │ ├── sysresource.go # 资源(菜单 / 按钮)
│ │ ├── sysorg.go # 组织
│ │ ├── sysposition.go # 职位
│ │ ├── sysgroup.go # 用户组
│ │ ├── sysmodule.go # 模块
│ │ ├── sysbanner.go # Banner
│ │ ├── sysconfig.go # 系统配置
│ │ ├── sysdict.go # 字典
│ │ ├── sysfile.go # 文件
│ │ ├── syslog.go # 操作日志
│ │ ├── sysnotice.go # 通知公告
│ │ ├── sysquickaction.go # 快捷操作
│ │ ├── clientuser.go # C端用户
│ │ ├── reluserrole.go # 用户角色关联
│ │ ├── reluserpermission.go # 用户直授权限关联
│ │ ├── relrolepermission.go # 角色权限关联
│ │ └── relroleresource.go # 角色资源关联
│ └── ... # Ent 生成的 CRUD 代码
├── modules/
│ ├── sys/ # B端(后台管理)
│ │ ├── auth/ # 认证模块(验证码 / SM2 公钥 / 登录注册登出)
│ │ │ ├── route.go # 子路由聚合
│ │ │ ├── captcha/api/v1/api.go
│ │ │ ├── sm2/api/v1/api.go
│ │ │ └── username/
│ │ │ ├── params.go # 请求/响应参数
│ │ │ ├── logic.go # 登录逻辑
│ │ │ └── api/v1/api.go # 路由注册 + Handler
│ │ ├── banner/ # Banner 管理
│ │ ├── config/ # 系统配置管理
│ │ ├── dict/ # 字典管理
│ │ ├── file/ # 文件管理(上传/下载)
│ │ ├── group/ # 用户组管理
│ │ ├── home/ # 首页仪表盘 + 快捷操作
│ │ ├── log/ # 操作日志查询 + 图表
│ │ ├── notice/ # 通知公告管理
│ │ ├── org/ # 组织管理(树形结构)
│ │ ├── permission/ # 权限管理
│ │ ├── position/ # 职位管理
│ │ ├── resource/ # 资源管理(模块 / 菜单 / 按钮)
│ │ ├── role/ # 角色管理(含权限 / 资源分配)
│ │ ├── session/ # 在线会话管理
│ │ ├── analyze/ # 系统分析仪表盘
│ │ └── user/ # 用户管理(含角色 / 组分配)
│ └── client/ # C端(客户端)
│ ├── auth/ # 认证模块(验证码 / SM2 公钥 / 登录注册登出)
│ │ ├── route.go
│ │ ├── captcha/api/v1/api.go
│ │ ├── sm2/api/v1/api.go
│ │ └── username/
│ │ ├── params.go
│ │ ├── logic.go
│ │ └── api/v1/api.go
│ ├── session/ # 在线会话管理
│ └── user/ # C端用户管理
├── config.yaml # 配置文件
├── scripts/
│ └── hei_data.sql # 数据库初始化脚本
├── main.go # 应用入口
└── go.mod # Go 模块定义
```
### 模块结构约定
每个业务模块遵循垂直切片布局:
```
modules///
├── params.go # 请求/响应参数结构体
├── service.go # 业务逻辑层
└── api/v1/
└── api.go # Gin 路由注册 + Handler 函数
```
认证模块因包含多个子模块(captcha / sm2 / username),额外包含 `route.go` 聚合子路由和 `logic.go` 逻辑文件。
## 快速开始
### 环境要求
- Go 1.25+
- MySQL 8.0+
- Redis 6.0+
### 配置
编辑 `config.yaml` 文件:
```yaml
app:
name: hei-gin
version: 1.0.0
debug: true
host: 127.0.0.1
port: 18885
upload_max_size: 52428800
db:
host: localhost
port: 3306
user: root
password: "123456"
database: hei_data
pool_size: 20
pool_recycle: 3600
redis:
host: localhost
port: 6379
password: "123456"
database: 1
max_connections: 200
jwt:
secret_key: your-jwt-secret-key
algorithm: HS256
expire_seconds: 2592000
token_name: Authorization
sm2:
private_key: your-sm2-private-key
public_key: your-sm2-public-key
cors:
allow_origins: ["*"]
allow_methods: ["*"]
allow_headers: ["*"]
allow_credentials: false
snowflake:
instance: 1
```
### 初始化数据库
```bash
# 导入表结构和初始数据
mysql -u root -p hei_data < scripts/hei_data.sql
```
### 运行
```bash
go run main.go
```
服务启动后访问:
- 健康检查:
## 认证体系
框架通过路径前缀自动分流认证方式:
| 路径模式 | 认证方式 | 说明 |
|---------|---------|------|
| `/api/v1/b/*` | AuthTool(B端JWT)认证 + CheckPermission | B端后台管理 |
| `/api/v1/c/*` | ClientAuthTool(C端JWT)认证 + CheckPermission | C端客户端 |
| `/api/v1/public/*` | 无认证 | 公开接口 |
认证中间件按路径前缀自动分流,CORS 预检请求(OPTIONS)和静态路径(/favicon.ico 等)跳过认证。
## 中间件参考
### 权限中间件
```go
import "hei-gin/core/auth/middleware"
r.GET("/api/v1/sys/banner/page",
middleware.HeiCheckPermission([]string{"sys:banner:page"}),
PageHandler,
)
```
支持 `AND`(默认,全部权限)和 `OR`(任一权限)两种模式:
```go
// OR 模式:满足任一权限即可
middleware.HeiCheckPermission([]string{"sys:user:view", "sys:user:edit"}, "OR")
```
### 操作日志
```go
import "hei-gin/core/log"
r.POST("/api/v1/sys/banner/create",
log.SysLog("添加Banner"),
middleware.HeiCheckPermission([]string{"sys:banner:create"}),
CreateHandler,
)
```
### 防重复提交
```go
import "hei-gin/core/auth/middleware"
r.POST("/api/v1/sys/xxx/create",
middleware.NoRepeat(3000), // 3 秒内相同参数禁止重复提交
CreateHandler,
)
```
## API 规范
### 统一响应格式
```json
{
"code": 200,
"message": "请求成功",
"data": {},
"success": true,
"trace_id": "uuid-string"
}
```
### 分页响应
```json
{
"code": 200,
"message": "请求成功",
"data": {
"records": [],
"total": 100,
"page": 1,
"size": 20,
"pages": 5
},
"success": true,
"trace_id": "uuid-string"
}
```
## 权限数据链路
```
User ──→ RelUserRole ──→ Role ──→ RelRolePermission ──→ Permission
User ──→ RelUserPermission ──→ Permission (直授)
```
权限匹配支持 `*`(单级通配符)和 `**`(多级通配符),例如 `sys:*` 匹配所有 sys 模块权限。
## 文件存储
框架通过统一的 `FileStorage` 接口抽象文件存储后端,支持三种实现,切换仅需修改初始化代码:
| 存储后端 | 实现 |
|---------|------|
| Local 本地存储 | `core/storage/local.go` |
| MinIO 对象存储 | `core/storage/minio.go` |
| AWS S3 对象存储 | `core/storage/s3.go` |
## 相关项目
- **[Hei Boot](https://github.com/jiangbyte/hei-boot)** — Java Spring Boot 单体版本
- **[Hei FastAPI](https://github.com/jiangbyte/hei-fastapi)** — Python FastAPI 单体版本
- **[Hei Admin Vue](https://github.com/jiangbyte/hei-admin-vue)** — Vue3 前端管理后台
## 开源协议
本项目采用 [MIT License](LICENSE) 开源协议