go 响应数据vo 如何快捷过滤 gorm查询结果中的敏感信息?

作者站长头像
站长
· 阅读数 17

1、gorm查询结果是一个结构体模型数据

type Merchant struct {
    Id          int                  `json:"id" gorm:"comment:''"`
    Username    string               `json:"username" gorm:"comment:'用户名'"`
    Password    string               `json:"password" gorm:"comment:'密码'"`
    ……
}

2、我将结构体模型数据过滤Password字段,只返回username字段

3、我除了自己创建一个map,然后循环gorm查询结果,一行一行填充有没有其他办法

m := map[string]interface{}{}
    for _, item := range row {
        m["username"]=row.Username
        ……
    }
回复
1个回答
avatar
test
2024-07-13
  1. 参考GORM的相关钩子逻辑(https://gorm.io/docs/hooks.html),查询出来后可以手动将password字段置空。
func (u *Merchant) AfterFind(tx *gorm.DB) (err error) {
    u.Password = ""
    return
}

2.使用一个仅包含部分字段的结构体去接收查询结果

## 仅包含部分子字段的结构体
type MerchantBase struct {
    Id       int    `json:"id" gorm:"comment:''"`
    Username string `json:"username" gorm:"comment:'用户名'"`
}
## 查询相关
db.Model(&Merchant{}).Find(&MerchantBase{})
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容