前几天的方案,是可以查询一个应用关联的用户及所属项目。
但有个问题,
那个外键里,会包含所有的外键关键信息,包括用户密码这些·····
所以,要用preload的闭包来作过滤。
这样看来起,是安全了不少。
但有个小尾巴没有解决:
就是用户密码那里是为空,如何能完全不包含呢????????
存疑,再解决。
//GetApplications 获取Applications
func (a *ApplicationRepository) GetApplications(PageNum uint, PageSize uint, total *uint64, where interface{}) *[]models.Application {
var applications []models.Application
db := a.Source.DB().Model(&applications).Where(&applications)
db = db.Preload("User", func(db *gorm.DB) *gorm.DB {
return db.Select("id,username")
}).Preload("Project", func(db *gorm.DB) *gorm.DB {
return db.Select("id,name,cn_name, description")
})
db = db.Order("updated_at desc")
db = db.Where(where)
err := db.Offset((PageNum - 1) * PageSize).Limit(PageSize).Find(&applications).Error
if err != nil {
a.Log.Errorf("获取Applications失败", err)
}
err = db.Count(total).Error
if err != nil {
a.Log.Errorf("查询总数出错", err)
// return err
}
return &applications
}
来源:oschina
链接:https://my.oschina.net/u/4385177/blog/3275907