/ginadmin

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

Primary LanguageGoApache License 2.0Apache-2.0

GinAdmin

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

logo

logo

依赖

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

功能清单

✅权限控制

✅日志管理

✅模板页面

✅自动分页

✅Docker部署

✅静态资源打包

🔲性能监控

🔲命令行操作

使用文档

  1. git 克隆地址

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

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

    [mysql]
    username=root
    password=123456
    database=db_beego
    host=127.0.0.1
    port=3306
    max_open_conn=50
    max_idle_conn=20
    [session]
    session_name=gosession_id
    [base]
    port=:8091
    
  4. 运行 go run main.go访问地址 http://localhost:端口地址/admin/login。默认账户:admin 密码:111111

  1. 替换conf目录下的配置项

    [mysql]
    username=docker
    password=123456
    database=docker_mysql
    host=localmysql
    port=3306
    max_open_conn=50
    max_idle_conn=20
    [session]
    session_name=gosession_id
    [base]
    host=0.0.0.0
    port=20010
    fill_data=true
  2. 执行命令 docker-compose up

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

🔹分页

  1. 使用 pkg/comment/util.go 里面的 PageOperation 进行分页
    adminDb := models.Db.Table("admin_users").Select("nickname","username").Where("uid != ?", 1)
    adminUserData := comment.PageOperation(c, adminDb, 1, &adminUserList)
  2. 在html中使用
    {{ .adminUserData.PageHtml }}

🔹日志

  1. 自定义日志 在 pkg/loggers 目录下新建logger
    参考 userlog.go 文件
    
  2. 调用自定义的的logger写日志
    loggers.UserLogger.Info("无法获取网址",
    zap.String("url", "http://www.baidu.com"),
    zap.Int("attempt", 3),
    zap.Duration("backoff", time.Second),)
  1. models下定义的文件均需要实现 TableName() string 方法,并将实现该结构体的指针写入到 GetModels 方法中

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

  3. 数据库迁移,先使用go install cmd\ginadmin-cli安装ginadmin-cli 命令,执行命令行工具

    ginadmin-cli db migrate
  4. 数据填充,需在相应目录下实现 FillData() 方法执行如下命令

    ginadmin-cli db seed
  5. 可以通过设置 ini 配置文件中的 fill_datamigrate_table 分别控制程序重启时自动迁移数据表和填充数据

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

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

    [base]
    port=:8091
    
  3. 在代码中调用配置文件的信息

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

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

  • 框架中的常用方法定义在 comment/auth/casbinauth/asbin.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
    },
  • 使用 go build -tags=release .\cmd\ginadmin 生成二进制文件
  • 打包静态资源部署 go build -tags=embed .\cmd\ginadmin