Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

gphper/ginadmin

Open more actions menu

Repository files navigation

最新文档查看

https://gphper.github.io/ginadmindoc/#/

GinAdmin

这个项目是以Gin框架为基础搭建的后台管理平台,虽然很多人都认为go是用来开发高性能服务端项目的,但是也难免有要做web管理端的需求,总不能再使用别的语言来开发吧。所以整合出了GinAdmin项目,请大家多提意见指正!欢迎 star ⭐⭐

login index

依赖

  • golang > 1.8
  • Gin
  • BootStrap
  • LayUi
  • WebUpload
  • Light Year Admin Using Iframe

功能清单

✅权限控制

✅日志管理

✅模板页面

✅自动分页

✅Docker部署

✅静态资源打包

✅性能监控

✅API JWT

✅redis日志落盘保存

✅HTTP测试

🔲登录日志

🔲csrf 防御

🔲命令行操作

使用文档

  1. git 克隆地址

    git clone https://github.com/gphper/ginadmin.git
    
  2. 下载依赖包

    go mod download
  3. 配置 configs/config.yaml文件

    mysql:
    -  name: "default"
       username: "root"
       password: "123456"
       database: "db_ginadmin"
       host: "127.0.0.1"
       port: 3306
       max_open_conn: 50
       max_idle_conn: 20
    redis:
       addr: "localhost:6379"
       db: 0
       password: ""
    session:
       session_name: "gosession_id"
    base:
       host: 0.0.0.0
       port: 20011
       log_media: "redis"
  4. 运行 go run .\cmd\ginadmin访问地址 http://localhost:端口地址/admin/login。默认账户:admin 密码:111111

  5. vscode调试配置文件 launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ginadmin",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "${workspaceRoot}/cmd/ginadmin",
            "trace": true,
            "args":[
                "--root_path=${workspaceRoot}"
            ],
        }
}
  1. 替换conf目录下的配置项

    mysql:
    -  name: "default"
       username: "docker"
       password: "123456"
       database: "docker_mysql"
       host: "localmysql"
       port: 3306
       max_open_conn: 50
       max_idle_conn: 20
    redis:
       addr: "localredis:6379"
       db: 0
       password: "ginadmin"
    session:
       session_name: "gosession_id"
    base:
       host: 0.0.0.0
       port: 20010
       log_media: "redis"
  2. 执行命令 docker-compose up -d

  3. 进入到容器中 docker exec -it ginadmin-web bash

  4. 下载扩展 go mod tidy

  5. 运行项目 go run ./cmd/ginadmin/ run 访问地址 http://localhost:20010/admin/login

  6. 桌面连接redis地址

    地址:127.0.0.1
    端口:6380
    密码:ginadmin
    
  7. 桌面连接mysql地址

    地址:localhost
    端口:3310
    用户名:docker
    密码:123456
    
|--api  // Api接口控制器
|--build // 封装的公共方法
|--cmd  // 命令行工具
|--configs // 配置文件
|--deployments // docker-compose 部署文件
|--internal //核心代码
|--logs // 日志存放目录
|--pkg // 公共调用部分
|--web //视图静态文件

🔹分页

  1. 使用 pkg/paginater/paginater.go 里面的 PageOperation 进行分页

    adminDb := models.Db.Table("admin_users").Select("nickname","username").Where("uid != ?", 1)
    adminUserData := paginater.PageOperation(c, adminDb, 1, &adminUserList)
  2. 在html中使用

    {{ .adminUserData.PageHtml }}

🔹日志

  1. 系统日志

    设置路由中间件来收集系统日志和错误日志,设置 internal/router/default.go 文件

  2. 自定义日志

    使用 loggers.LogInfo()方法记录日志 github.com/gphper/ginadmin/pkg/loggers`

    loggers.LogInfo("admin", "this is a info message", map[string]string{
            "user_info": "this is a user info",
    })
  3. 切换存储介质

    在配置文件中修改 log_media 参数默认file文件存储可选redis存储

  1. models下定义的文件均需要实现 TableName() string 方法,并将实现该结构体的指针写入到 GetModels 方法中

    func GetModels() []interface{} {
        return []interface{}{
            &AdminUsers{},
            &AdminGroup{},
        }
    }
  2. model需要继承 BaseModle 并且实现 TableName 方法,如果需要初始化填充数据的话,需要实现 FillData() 方法,并将数据填充需要执行的代码写到函数体里。详情参照 AdminUsers

  • pkg/cron/cron.go 添加定时执行任务
  1. 现在 configs/config.go 添加配置项的 struct 类型,例如

    type AppConf struct {
        BaseConf `yaml:"base"`
    }
    type BaseConf struct {
        Port string `yaml:"port"`
    }
  2. configs/config.yaml 添加配置信息

    base:
       port: 20011
    
  3. 在代码中调用配置文件的信息

    configs.App.BaseConf.Port
  • 所有的后台模板都写到 web/views/template 目录下面,并且分目录存储,调用时按照 目录/模板名称 的方式调用
  • 菜单权限定义到 internal/menu/menu.go 文件下,定义完之后在用户组管理里面编辑权限

  • casbin版集成了casbin权限管理框架,官方地址:casbin

  • 框架中的常用方法定义在 pkg/casbinauth/casbin.go 文件中

  • 在控制器中可用从 gin.context 获取登录用户信息

    info,_ := c.Get("userInfo")
  • template 中判断权限的函数 judgeContainPriv 定义在 pkg/template/default.go 文件下

    "judgeContainPriv": func(username string, obj string, act string) bool {
            if username == "admin" {
                return true
            }
            ok, err := casbinauth.Check(username, obj, act)
            if !ok || err != nil {
                return false
            }
            return true
    },
  • 使用 swagg 生成api文档,生成文件再docs目录下

    go install github.com/swaggo/swag/cmd/swag
    swag init -g cmd/ginadmin/main.go
    
  • 在根目录执行 go run .\cmd\ginadmin\ run 然后啊访问 http://localhost:20010/swagger/index.html

  • 使用 go build .\cmd\ginadmin 生成二进制文件
  • 打包静态资源部署 go build -tags=embed .\cmd\ginadmin
  • 运行程序命令
PS F:\ginadmin> go run .\cmd\ginadmin\ run -h
Run app

Usage:
  ginadmin run [flags]

Flags:
  -c, --config path string   config path
  -h, --help                 help for run
  -m, --mode string          dev or release (default "dev")
  • 数据表迁移命令
PS F:\ginadmin> go run .\cmd\ginadmin\ db migrate -h
DB Migrate

Usage:
  ginadmin db migrate [-t table] [flags]

Flags:
  -c, --config path string   config path
  -h, --help                 help for migrate
  -t, --table string         input a table name
  • 数据填充命令
PS F:\ginadmin> go run .\cmd\ginadmin\ db seed -h   
DB Seed

Usage:
  ginadmin db seed [-t table] [flags]

Flags:
  -c, --config path string   config path
  -h, --help                 help for seed
  -t, --table string         input a table name

About

基于Gin开发的后台脚手架,集成了、数据库操作、日志管理、权限分配管理、多模板页面、自动分页器、数据库迁移和填充、Docker集成部署等功能、静态资源打包

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.