Cadmin golang 服务端

项目地址: [github] [gitee]

在线文档地址: https://baiy.github.io/Cadmin/

特点

  1. 为便于给现有系统加入后台管理功能和加快新系统开发, 后台核心系统尽可能的减少依赖, 不侵入外层业务系统.
  2. 对请求处理按照请求类型可自定义请求调度类,便于不用业务系统使用和开发.

安装

  1. go get -u github.com/baiy/Cadmin-server-go

数据库

详见 数据库结构 一章

使用方法

在代码安装和数据库导入完毕后, 接下来需要将后台系统的入口代码嵌入当前系统的合适位置, 并进行相应的配置

原生

  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "github.com/baiy/Cadmin-server-go/admin"
  6. _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法
  7. _ "github.com/go-sql-driver/mysql"
  8. "net/http"
  9. )
  10. var db *sql.DB
  11. // 初始化数据库
  12. func initDb() {
  13. var err error
  14. db, err = sql.Open("mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local")
  15. if err != nil {
  16. panic(err)
  17. }
  18. }
  19. func main() {
  20. initDb()
  21. // 设置数据库操作对象
  22. admin.SetDb(db)
  23. // [可选] 注册自定义调度器
  24. // admin.RegisterDispatch()
  25. // [可选] 设置自定义密码生成器
  26. // admin.RegisterPassword()
  27. // [可选] 无需校验权限的api
  28. // admin.AddNoCheckLoginRequestId()
  29. // [可选] 只需登录即可访问的api
  30. // admin.AddOnlyLoginRequestId()
  31. // [可选] 设置请求标识变量名
  32. // admin.ActionName = ""
  33. // [可选] 设置请求token变量名
  34. // admin.TokenName = ""
  35. // [可选] 设置请求日志记录回调函数
  36. //admin.RegisterLogCallback()
  37. http.HandleFunc("/api/admin/", func(writer http.ResponseWriter, request *http.Request) {
  38. // 前后端分离项目一般会有跨域问题 自行处理
  39. writer.Header().Add("Access-Control-Allow-Origin", "*")
  40. writer.Header().Add("Access-Control-Allow-Headers", "Content-Type")
  41. context := admin.NewContext(writer, request)
  42. if err := context.Output(); err != nil {
  43. fmt.Println(err)
  44. }
  45. })
  46. _ = http.ListenAndServe("127.0.0.1:8001", nil)
  47. }

Beego

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/astaxie/beego"
  5. "github.com/astaxie/beego/context"
  6. "github.com/astaxie/beego/orm"
  7. "github.com/baiy/Cadmin-server-go/admin"
  8. _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法
  9. _ "github.com/go-sql-driver/mysql" // import your used driver
  10. )
  11. func main() {
  12. orm.RegisterDataBase("default", "mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local", 30)
  13. db, _ := orm.GetDB("default")
  14. admin.SetDb(db)
  15. // 省略其他配置代码 查看原生示例代码
  16. beego.Any("/api/admin/", func(ctx *context.Context) {
  17. ctx.ResponseWriter.ResponseWriter.Header().Add("Access-Control-Allow-Origin", "*")
  18. ctx.ResponseWriter.ResponseWriter.Header().Add("Access-Control-Allow-Headers", "Content-Type")
  19. c := admin.NewContext(ctx.ResponseWriter.ResponseWriter, ctx.Request)
  20. if err := c.Output(); err != nil {
  21. fmt.Println(err)
  22. }
  23. })
  24. beego.Run("127.0.0.1:8001")
  25. }

Gorm

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/baiy/Cadmin-server-go/admin"
  5. _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法
  6. _ "github.com/go-sql-driver/mysql"
  7. "github.com/jinzhu/gorm"
  8. "net/http"
  9. )
  10. func main() {
  11. db, _ := gorm.Open("mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local")
  12. defer db.Close()
  13. admin.SetDb(db.DB())
  14. // 省略其他配置代码 查看原生示例代码
  15. http.HandleFunc("/api/admin/", func(writer http.ResponseWriter, request *http.Request) {
  16. // 前后端分离项目一般会有跨域问题 自行处理
  17. writer.Header().Add("Access-Control-Allow-Origin", "*")
  18. writer.Header().Add("Access-Control-Allow-Headers", "Content-Type")
  19. context := admin.NewContext(writer, request)
  20. if err := context.Output(); err != nil {
  21. fmt.Println(err)
  22. }
  23. })
  24. _ = http.ListenAndServe("127.0.0.1:8001", nil)
  25. }

Xorm

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/baiy/Cadmin-server-go/admin"
  5. _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法
  6. _ "github.com/go-sql-driver/mysql"
  7. "github.com/go-xorm/xorm"
  8. "net/http"
  9. )
  10. func main() {
  11. engine, _ := xorm.NewEngine("mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local")
  12. admin.SetDb(engine.DB().DB)
  13. // 省略其他配置代码 查看原生示例代码
  14. http.HandleFunc("/api/admin/", func(writer http.ResponseWriter, request *http.Request) {
  15. // 前后端分离项目一般会有跨域问题 自行处理
  16. writer.Header().Add("Access-Control-Allow-Origin", "*")
  17. writer.Header().Add("Access-Control-Allow-Headers", "Content-Type")
  18. context := admin.NewContext(writer, request)
  19. if err := context.Output(); err != nil {
  20. fmt.Println(err)
  21. }
  22. })
  23. _ = http.ListenAndServe("127.0.0.1:8001", nil)
  24. }

自定义用户密码生成策略

  1. 实现 github.com/baiy/Cadmin-service-go/admin.Passwrod 接口
  2. 注册密码生成器,使用github.com/baiy/Cadmin-service-go/admin.RegisterPassword()

系统内置密码生成器: https://github.com/baiy/Cadmin-server-go/blob/master/admin/password.go

请求调度器开发

  1. 实现 github.com/baiy/Cadmin-service-go/admin.Dispatch 接口
  2. 注册调度器,使用github.com/baiy/Cadmin-service-go/admin.RegisterDispatch()

内置调度器: https://github.com/baiy/Cadmin-server-go/blob/master/admin/dispatch.go

使用默认调度器开发

  1. package router
  2. import (
  3. "github.com/baiy/Cadmin-service-go/admin"
  4. )
  5. func init(){
  6. admin.RegisterDefaultDispatcherHandleMethod(map[string]admin.DefaultDispatcherHandleMethod{
  7. "request.call":func (context *admin.Context) (interface{}, error) {return nil,nil},
  8. })
  9. }

request.call 对应后台请求中的类型配置值