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

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

How to get userinfo in gorm hook(BeforeSave)?

问题

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

type GVA_MODEL struct {
    ID        uint           `gorm:"primarykey"` 
    CreatedAt time.Time      
    UpdatedAt time.Time     
    DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
    UpdatedBy string
}

func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
    fmt.Println("----------获取用户名/ID----------")
    return
}

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

英文:

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 )

type GVA_MODEL struct {
	ID        uint           `gorm:"primarykey"` 
	CreatedAt time.Time      
	UpdatedAt time.Time     
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` 
	UpdatedBy string
}

func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
	fmt.Println("----------get user name/ID----------")
	return
}

答案1

得分: 1

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

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

// 从你的gin控制器中设置用户信息...
db.Set("user_info", UserInfo{})

// 从db实例的上下文中访问user_info
func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
    userInfo, _ := db.Get("user_info")
    fmt.Printf("----------获取用户名/ID----------: %v", userInfo)
    return
}
英文:

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.

// set user info from your gin controller...
db.Set("user_info", UserInfo{})

// access user_info from db instance's context
func (g *GVA_MODEL) BeforeSave(db *gorm.DB) (err error) {
    userInfo, _ := db.Get("user_info")
    fmt.Printf("----------get user name/ID----------: %v", userInfo)
    return
}

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:

确定