Gin Admin
基于 Gin + GORM + Casbin + Dig 实现的RBAC权限管理脚手架,目的是提供一套轻量的中后台开发框架,方便、快速的完成业务需求的开发。
- 在线演示地址 (用户名: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 mod init gitee.com/forging2012/gin-admin
➜ gin-admin git:(master) ✗ go mod init gitee.com/forging2012/gin-admin
go: creating new go.mod: module gitee.com/forging2012/gin-admin
快速创建项目
$ 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 用户温馨提示:
- 执行出现错误:
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/
温馨提醒
- 默认配置采用的是 sqlite 数据库,数据库文件(
自动生成
)在data/gadmin.db
。如果想切换为mysql
或postgres
,请更改配置文件,并创建数据库(数据库创建脚本在script
目录下)。
- 日志的默认配置为标准输出,如果想切换到写入文件或写入到 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:执行脚本
感谢以下框架的开源支持
swagger
0.0.0.0:10088
http://0.0.0.0:10088/
http://localhost:10088/swagger/
gin-admin-cli
➜ src gin-admin-cli new -m -d ~/go/src/gin-admin -p gin-admin
2020/02/20 00:46:35 项目生成目录:/Users/songyawei/go/src/gin-admin
2020/02/20 00:46:35 执行命令:git clone -q -b master https://gitee.com/lyric/gin-admin.git /Users/songyawei/go/src/gin-admin
项目创建成功:/Users/songyawei/go/src/gin-admin
├── cmd
│ └── server:主服务
├── configs:配置文件目录
├── docs:文档目录
├── internal:内部应用
│ └── app:主应用目录
│ ├── bll:业务逻辑层接口
│ │ └── impl:业务逻辑层的接口实现
│ ├── config:配置参数(与配置文件一一映射)
│ ├── context:统一上下文
│ ├── errors:统一的错误定义
│ ├── ginplus:gin的扩展函数库
│ ├── middleware:gin中间件
│ ├── model:存储层接口
│ │ └── impl:存储层接口实现
│ ├── routers:路由层
│ │ └── api:/api路由模块
│ │ └── ctl:/api路由模块对应的控制器层
│ ├── schema:对象模型
│ ├── swagger:swagger静态目录
│ └── test:单元测试
├── pkg:公共模块
│ ├── auth:认证模块
│ │ └── jwtauth:JWT认证模块实现
│ ├── gormplus:gorm扩展实现
│ ├── logger:日志模块
│ └── util:工具库
└── scripts:执行脚本
➜ gin-admin git:(master) ✗ gin-admin-cli g -d ~/go/src/gin-admin -p gin-admin -n Task -c '任务管理'
文件[/Users/songyawei/go/src/gin-admin/internal/app/schema/s_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/model/impl/gorm/internal/entity/e_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/model/impl/gorm/internal/model/m_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/model/m_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/model/impl/gorm/gorm.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/bll/impl/internal/b_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/bll/b_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/bll/impl/impl.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/routers/api/ctl/c_task.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/routers/api/ctl/ctl.go]写入成功
文件[/Users/songyawei/go/src/gin-admin/internal/app/routers/api/api.go]写入成功
exit status 2
MIT License
Copyright (c) 2019 Lyric