英文:
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.Set
和db.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
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论