Gin-Admin

基于 GIN + GORM 2.0 + Casbin 2.0 + Wire DI 的轻量级、灵活、优雅且功能齐全的 RBAC 脚手架。「A lightweight, flexible, elegant and full-featured RBAC scaffolding based on GIN + GORM 2.0 + Casbin 2.0 + Wire DI.」

Github stars Tracking Chart

ReportCard GoDoc License

  • 在线演示地址 (用户名:root,密码:abc-123)(温馨提醒:为了达到更好的演示效果,这里给出了拥有最高权限的用户,请手下留情,只操作自己新增的数据,不要动平台本身的数据!谢谢!
  • Swagger 文档地址

特性

  • 遵循 RESTful API 设计规范
  • 基于 GIN WEB 框架,提供了丰富的中间件支持(用户认证、跨域、访问日志、请求频率限制、追踪 ID 等)
  • 基于 Casbin 的 RBAC 访问控制模型
  • 基于 GORM 的数据库存储(存储层对外采用接口的方式供业务层调用,实现了存储层的完全隔离)
  • 依赖注入(基于dig)
  • 日志追踪(基于logrus,日志钩子支持 gorm)
  • JWT 认证(基于黑名单的认证模式,存储支持:file/redis)
  • 支持 Swagger 文档(基于swaggo)
  • 单元测试(基于net/http/httptest包,覆盖所有接口层的测试)

快速开始

使用gin-admin-cli工具

快速创建项目

$ go get -v github.com/LyricTian/gin-admin-cli
$ gin-admin-cli new -m -d ~/go/src/gin-admin -p gin-admin

使用 air 工具启动服务(推荐)

可自动监听文件变化

$ go get -u github.com/cosmtrek/air
$ cd ~/go/src/gin-admin
$ go mod download
$ air

注意:在Linux子系统(WSL1)下使用需要使用root执行air命令,例如 sudo air,如果提示命令没找到,是因为GOBIN没有在root设置PATH环境变量,如果不想设置可以直接使用绝对路径,例如:sudo /home/{你的用户名}/go/bin/air,需要在代码目录下执行。

使用 run 命令运行服务

$ cd ~/go/src/gin-admin
$ go run cmd/server/main.go -c ./configs/config.toml -m ./configs/model.conf -swagger ./docs/swagger -menu ./configs/menu.json

启动成功之后,可在浏览器中输入地址访问:http://127.0.0.1:10088/swagger/

Windows 用户温馨提示:

  1. 执行出现错误:exec: "gcc": executable file not found in %PATH%,需要安装 gcc,下载地址:http://tdm-gcc.tdragon.net/download

解放劳动力 - 快速生成功能模块(以Task为例,具体可参考:gin-admin-cli)

$ gin-admin-cli g -d ~/go/src/gin-admin -p gin-admin -n Task -c '任务管理'

手动下载并运行

获取代码

$ go get -v github.com/LyricTian/gin-admin/cmd/server

运行

运行服务

也可以使用脚本运行(详情可查看Makefile):make start

$ cd github.com/LyricTian/gin-admin
$ go run cmd/server/main.go -c ./configs/config.toml -m ./configs/model.conf -swagger ./docs/swagger -menu ./configs/menu.json

启动成功之后,可在浏览器中输入地址访问:http://127.0.0.1:10088/swagger/

温馨提醒

  1. 默认配置采用的是 sqlite 数据库,数据库文件(自动生成)在data/gadmin.db。如果想切换为mysqlpostgres,请更改配置文件,并创建数据库(数据库创建脚本在script目录下)。
  2. 日志的默认配置为标准输出,如果想切换到写入文件或写入到 gorm 存储,可以自行切换配置。

前端实现

Swagger 文档的使用

文档规则请参考:https://github.com/swaggo/swag#declarative-comments-format

安装工具并生成文档

$ go get -u -v github.com/swaggo/swag/cmd/swag
$ swag init -g ./internal/app/routers/swagger.go -o ./docs/swagger

生成文档之后,可在浏览器中输入地址访问:http://127.0.0.1:10088/swagger/

项目结构概览

.
├── cmd
│   └── server:主服务(程序入口)
├── configs:配置文件目录(包含运行配置参数及casbin模型配置)
├── docs:文档目录
│   └── swagger:swagger静态文件目录
├── internal:内部应用
│   └── app:主应用目录
│       ├── bll:业务逻辑层接口
│       │   └── impl:业务逻辑层的接口实现
│       ├── config:配置参数(与配置文件一一映射)
│       ├── context:统一上下文
│       ├── errors:统一的错误处理
│       ├── ginplus:gin的扩展函数库
│       ├── middleware:gin中间件
│       ├── model:存储层接口
│       │   └── impl:存储层接口实现
│       │       └── gorm:基于gorm的存储层实现
│       ├── routers:路由层
│       │   └── api:/api路由模块
│       │       └── ctl:/api路由模块对应的控制器层
│       ├── schema:对象模型
│       └── test:针对接口的单元测试
├── pkg:公共模块
│   ├── auth:认证模块
│   │   └── jwtauth:JWT认证模块实现
│   ├── logger:日志模块
│   └── util:工具库
└── scripts:执行脚本

感谢以下框架的开源支持

互动交流

与作者对话

该项目是利用业余时间进行开发的,开发思路主要是来源于自己的项目积累及个人思考,如果您有更好的想法和建议请与我进行沟通,我非常期待!下面是我的微信二维码:

QQ 群:1409099

MIT License

Copyright (c) 2019 Lyric

Overview

Name With OwnerLyricTian/gin-admin
Primary LanguageGo
Program languageGo (Language Count: 3)
Platform
License:Apache License 2.0
Release Count39
Last Release Namev10.0.2 (Posted on )
First Release Namev1.0.0 (Posted on )
Created At2018-09-26 14:33:38
Pushed At2024-04-08 03:12:07
Last Commit At2022-07-04 23:00:23
Stargazers Count2.5k
Watchers Count71
Fork Count500
Commits Count775
Has Issues Enabled
Issues Count97
Issue Open Count46
Pull Requests Count34
Pull Requests Open Count9
Pull Requests Close Count12
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top