Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/LyricTian/gin-admin
A lightweight, flexible, elegant and full-featured RBAC scaffolding based on GIN + GORM 2.0 + Casbin 2.0 + Wire DI.
https://github.com/LyricTian/gin-admin
admin casbin gin gin-admin gin-casbin go go-admin go-rbac golang gorm gormv2 rbac
Last synced: 6 days ago
JSON representation
A lightweight, flexible, elegant and full-featured RBAC scaffolding based on GIN + GORM 2.0 + Casbin 2.0 + Wire DI.
- Host: GitHub
- URL: https://github.com/LyricTian/gin-admin
- Owner: LyricTian
- License: apache-2.0
- Created: 2018-09-26T14:33:38.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2024-05-21T06:40:22.000Z (6 months ago)
- Last Synced: 2024-05-21T07:56:16.656Z (6 months ago)
- Topics: admin, casbin, gin, gin-admin, gin-casbin, go, go-admin, go-rbac, golang, gorm, gormv2, rbac
- Language: Go
- Homepage: http://101.42.232.163:8040
- Size: 22.9 MB
- Stars: 2,473
- Watchers: 71
- Forks: 500
- Open Issues: 55
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesomeLibrary - gin-admin - RBAC scaffolding based on Gin + Gorm 2.0 + Casbin + Wire DI. (语言资源库 / go)
- awesome-gin - LyricTian/gin-admin
- awesome-hacking-lists - LyricTian/gin-admin - A lightweight, flexible, elegant and full-featured RBAC scaffolding based on GIN + GORM 2.0 + Casbin 2.0 + Wire DI. (Go)
README
# [Gin](https://github.com/gin-gonic/gin)-Admin
> A lightweight, flexible, elegant and full-featured RBAC scaffolding based on GIN + GORM 2.0 + Casbin 2.0 + Wire DI.
English | [中文](README_CN.md)
[![LICENSE](https://img.shields.io/github/license/LyricTian/gin-admin.svg)](https://github.com/LyricTian/gin-admin/blob/main/LICENSE)
[![Language](https://img.shields.io/badge/Language-Go-blue.svg)](https://golang.org/)
[![Go Report Card](https://goreportcard.com/badge/github.com/LyricTian/gin-admin)](https://goreportcard.com/report/github.com/LyricTian/gin-admin)
[![GitHub release](https://img.shields.io/github/tag/LyricTian/gin-admin.svg?label=release)](https://github.com/LyricTian/gin-admin/releases)
[![GitHub release date](https://img.shields.io/github/release-date/LyricTian/gin-admin.svg)](https://github.com/LyricTian/gin-admin/releases)
[![GoDoc](https://img.shields.io/badge/Godoc-reference-blue.svg)](https://godoc.org/github.com/LyricTian/gin-admin)## Features
- :scroll: Follow the `RESTful API` design specification & interface-based programming specification
- :house: More concise project structure, modular design, improve code readability and maintainability
- :toolbox: Based on the `GIN` framework, it provides rich middleware support (JWTAuth, CORS, RequestLogger, RequestRateLimiter, TraceID, Casbin, Recover, GZIP, StaticWebsite)
- :closed_lock_with_key: RBAC access control model based on `Casbin`
- :card_file_box: Database access layer based on `GORM 2.0`
- :electric_plug: Dependency injection based on `WIRE` -- the role of dependency injection itself is to solve the cumbersome initialization process of hierarchical dependencies between modules
- :zap: Log output based on `Zap & Context`, and unified output of key fields such as TraceID/UserID through combination with Context (also supports log hooks written to `GORM`)
- :key: User authentication based on `JWT`
- :microscope: Automatically generate `Swagger` documentation based on `Swaggo` - [Preview](http://101.42.232.163:8040/swagger/index.html)
- :test_tube: Implement API unit testing based on `testify`
- :100: Stateless service, horizontally scalable, improves service availability - dynamic permission management of Casbin is implemented through scheduled tasks and Redis
- :hammer: Complete efficiency tools, can develop complete code modules through configuration - [gin-admin-cli](https://github.com/gin-admin/gin-admin-cli)![swagger](./swagger.jpeg)
## Frontend
- [Frontend project based on Ant Design React](https://github.com/gin-admin/gin-admin-frontend) - [Preview](http://101.42.232.163:8040/): admin/abc-123
- [Frontend project based on Vue.js](https://github.com/gin-admin/gin-admin-vue) - [Preview](http://101.42.232.163:8080/): admin/abc-123## Dependencies
- [Go](https://golang.org/) 1.19+
- [Wire](github.com/google/wire) `go install github.com/google/wire/cmd/wire@latest`
- [Swag](github.com/swaggo/swag) `go install github.com/swaggo/swag/cmd/swag@latest`
- [GIN-ADMIN-CLI](https://github.com/gin-admin/gin-admin-cli) `go install github.com/gin-admin/gin-admin-cli/v10@latest`## Quick Start
### Create a new project
```bash
gin-admin-cli new -d ~/go/src --name testapp --desc 'A test API service based on golang.' --pkg 'github.com/xxx/testapp'
```### Start the service
```bash
cd ~/go/src/testapp
make start
# or
go run main.go start
```### Generate a new module
> For more detailed usage instructions, please refer to [gin-admin-cli](https://github.com/gin-admin/gin-admin-cli)
```bash
gin-admin-cli gen -d . -m CMS --structs Article --structs-comment 'Article management'
```### Remove a module
```bash
gin-admin-cli rm -d . -m CMS --structs Article
```### Build the service
```bash
make build
# or
go build -ldflags "-w -s -X main.VERSION=v1.0.0" -o ginadmin
```### Generate swagger docs
```bash
make swagger
# or
swag init --parseDependency --generalInfo ./main.go --output ./internal/swagger
```### Generate wire inject
```bash
make wire
# or
wire gen ./internal/wirex
```## Project Layout
```text
├── cmd
│ ├── start.go
│ ├── stop.go
│ └── version.go
├── configs
│ ├── dev
│ │ ├── logging.toml (Log configuration file)
│ │ ├── middleware.toml (Middleware configuration file)
│ │ └── server.toml (Service configuration file)
│ ├── menu.json (Initialize menu file)
│ └── rbac_model.conf (Casbin RBAC model configuration file)
├── internal
│ ├── bootstrap
│ │ ├── bootstrap.go (Initialization)
│ │ ├── http.go (HTTP service)
│ │ └── logger.go (Log service)
│ ├── config (Configuration file)
│ │ ├── config.go
│ │ ├── consts.go
│ │ ├── middleware.go
│ │ └── parse.go
│ ├── mods
│ │ ├── rbac (RBAC module)
│ │ │ ├── api (API layer)
│ │ │ ├── biz (Business logic layer)
│ │ │ ├── dal (Data access layer)
│ │ │ ├── schema (Data model layer)
│ │ │ ├── casbin.go (Casbin initialization)
│ │ │ ├── main.go (Module initialization)
│ │ │ └── wire.go (Dependency injection)
│ │ ├── sys
│ │ │ ├── api
│ │ │ ├── biz
│ │ │ ├── dal
│ │ │ ├── schema
│ │ │ ├── main.go
│ │ │ └── wire.go
│ │ └── mods.go
│ ├── utility
│ │ └── prom
│ │ └── prom.go (Prometheus)
│ └── wirex (Dependency injection)
│ ├── injector.go
│ ├── wire.go
│ └── wire_gen.go
├── test (Unit test)
│ ├── menu_test.go
│ ├── role_test.go
│ ├── test.go
│ └── user_test.go
├── Dockerfile
├── Makefile
├── README.md
├── go.mod
├── go.sum
└── main.go (Entry)
```## Community
- [Discord](https://discord.gg/UCnpActY)
- [Issues](https://github.com/LyricTian/gin-admin/issues)