模块


GoAdmin在构建中,生成了一些模块,如:数据库模块,用户认证模块;本节介绍如何获取和使用。

数据库模块

数据库在配置后,引擎设置全局配置的时候生成,生成后可以通过引擎获取该模块的控制权。

  1. import (
  2. ...
  3. "github.com/GoAdminGroup/go-admin/engine"
  4. ...
  5. )
  6. func main() {
  7. ...
  8. eng := engine.Default()
  9. cfg := config.Config{
  10. ...
  11. Databases: config.DatabaseList{
  12. "default": {
  13. Host: "127.0.0.1",
  14. Port: "3306",
  15. User: "root",
  16. Pwd: "root",
  17. Name: "godmin",
  18. MaxIdleCon: 50,
  19. MaxOpenCon: 150,
  20. Driver: config.DriverMysql,
  21. },
  22. },
  23. ...
  24. }
  25. // 这里生成了数据库模块
  26. _ = eng.AddConfig(cfg).
  27. AddPlugins(adminPlugin).
  28. Use(r)
  29. // 获取mysql连接
  30. conn := eng.MysqlConnection()
  31. // 获取mssql连接
  32. conn := eng.MssqlConnection()
  33. // 获取postgresql连接
  34. conn := eng.PostgresqlConnection()
  35. // 获取sqlite连接
  36. conn := eng.SqliteConnection()
  37. // 注意,获取到的一个指针,指向的是全局唯一的真正的数据库连接对象。
  38. // 如果你要在数据模型文件中复用,那么你必须在 .Use(r) 调用前对连接对象进行设置
  39. // 否则会报空指针错误。比如:
  40. //
  41. // _ = eng.AddConfig(cfg).
  42. // ResolveMysqlConnection(tables.SetConn)
  43. // AddPlugins(adminPlugin).
  44. // Use(r)
  45. //
  46. // 在tables.go文件中是:
  47. //
  48. // var conn db.Connection
  49. //
  50. // func SetConn(c db.Connection) {
  51. // conn = c
  52. // }
  53. //
  54. // 然后在数据模型文件中调用 conn,进行数据库操作
  55. // 通过setter函数获取
  56. eng.ResolveMysqlConnection(SetConn)
  57. ...
  58. }
  59. var globalConn db.Connection
  60. func SetConn(conn db.Connection) {
  61. globalConn = conn
  62. }

使用,获取到 connection 后,可以调用内置的数据库连接方法对sql数据库进行操作,如:

  1. import (
  2. ...
  3. "github.com/GoAdminGroup/go-admin/modules/db"
  4. "github.com/GoAdminGroup/go-admin/modules/db/dialect"
  5. ...
  6. )
  7. func main() {
  8. // 传入获取的数据库模块,调用sql数据库方法
  9. // 查询
  10. db.WithDriver(globalConn).Table("users").Select("id", "name").First()
  11. // 更新
  12. db.WithDriver(globalConn).Table("users").Where("id", "=", 10).
  13. Update(dialect.H{
  14. "name": "张三",
  15. })
  16. // 插入
  17. db.WithDriver(globalConn).Table("users").
  18. Insert(dialect.H{
  19. "name": "张三",
  20. })
  21. // 删除
  22. db.WithDriver(globalConn).Table("users").Where("id", "=", 10).Delete()
  23. // 等等...
  24. }

用户认证模块

我们编写页面内容时,需要获取对应的登录用户,并对其信息进行验证时,需要用到用户认证模块。

  1. import (
  2. ...
  3. adapter "github.com/GoAdminGroup/go-admin/adapter/gin"
  4. "github.com/GoAdminGroup/go-admin/engine"
  5. ...
  6. )
  7. func main() {
  8. ...
  9. eng := engine.Default()
  10. cfg := config.Config{
  11. ...
  12. }
  13. if err := eng.AddConfig(cfg).
  14. AddPlugins(adminPlugin, examplePlugin).
  15. Use(r); err != nil {
  16. panic(err)
  17. }
  18. r.GET("/admin", adapter.Content(func(ctx *gin.Context) (types.Panel, error) {
  19. // 获取登录用户
  20. user, _ := engine.User(ctx)
  21. // 验证其权限
  22. if !user.CheckPermission("dashboard") {
  23. return types.Panel{}, errors.New("没有权限")
  24. }
  25. // 验证其角色
  26. if !user.CheckRole("operator") {
  27. return types.Panel{}, errors.New("没有权限")
  28. }
  29. })
  30. ...
  31. }