在gorm的BeforeSave钩子中如何获取用户信息?

huangapple go评论109阅读模式
英文:

How to get userinfo in gorm hook(BeforeSave)?

问题

我在全局模型中添加了一个字段UpdateBy,用于保存更新该列的人员信息。所以我想使用Hook(gorm)来解决这个问题,但是我无法获取当前用户信息(使用gin)。

  1. type GVA_MODEL struct {
  2. ID uint `gorm:"primarykey"`
  3. CreatedAt time.Time
  4. UpdatedAt time.Time
  5. DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
  6. UpdatedBy string
  7. }
  8. func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
  9. fmt.Println("----------获取用户名/ID----------")
  10. return
  11. }

请注意,我只翻译了代码部分,其他内容不做翻译。

英文:

I add a field in global model which is UpdateBy and it save who updated the column , So I wanner to use Hook(gorm) to resolve But I Have no way to get current userinfo ( use gin )

  1. type GVA_MODEL struct {
  2. ID uint `gorm:"primarykey"`
  3. CreatedAt time.Time
  4. UpdatedAt time.Time
  5. DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
  6. UpdatedBy string
  7. }
  8. func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
  9. fmt.Println("----------get user name/ID----------")
  10. return
  11. }

答案1

得分: 1

BeforeSave钩子只能访问接收器(g *GVA_MODEL)的字段。

因此,如果你想在执行BeforeSave时传递一些额外的值,可以通过db.Setdb.Get来传递它们。

  1. // 从你的gin控制器中设置用户信息...
  2. db.Set("user_info", UserInfo{})
  3. // 从db实例的上下文中访问user_info
  4. func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
  5. userInfo, _ := db.Get("user_info")
  6. fmt.Printf("----------获取用户名/ID----------: %v", userInfo)
  7. return
  8. }
英文:

BeforeSave hook can only access fields from receiver: g *GVA_MODEL

So if you want to pass some extra values when executing BeforeSave, you can pass them via db.Set and db.Get.

  1. // set user info from your gin controller...
  2. db.Set("user_info", UserInfo{})
  3. // access user_info from db instance's context
  4. func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
  5. userInfo, _ := db.Get("user_info")
  6. fmt.Printf("----------get user name/ID----------: %v", userInfo)
  7. return
  8. }

huangapple
  • 本文由 发表于 2022年2月25日 14:19:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/71261819.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定