fix: update user

This commit is contained in:
CaIon 2024-04-24 19:40:29 +08:00
parent 20aaf30785
commit 08b5336431
2 changed files with 35 additions and 29 deletions

View File

@ -453,7 +453,7 @@ func UpdateUser(c *gin.Context) {
updatedUser.Password = "" // rollback to what it should be updatedUser.Password = "" // rollback to what it should be
} }
updatePassword := updatedUser.Password != "" updatePassword := updatedUser.Password != ""
if err := updatedUser.Update(updatePassword); err != nil { if err := updatedUser.Edit(updatePassword); err != nil {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"success": false, "success": false,
"message": err.Error(), "message": err.Error(),
@ -726,7 +726,7 @@ func ManageUser(c *gin.Context) {
user.Role = common.RoleCommonUser user.Role = common.RoleCommonUser
} }
if err := user.UpdateAll(false); err != nil { if err := user.Update(false); err != nil {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"success": false, "success": false,
"message": err.Error(), "message": err.Error(),

View File

@ -74,35 +74,35 @@ func GetAllUsers(startIdx int, num int) (users []*User, err error) {
} }
func SearchUsers(keyword string, group string) ([]*User, error) { func SearchUsers(keyword string, group string) ([]*User, error) {
var users []*User var users []*User
var err error var err error
// 尝试将关键字转换为整数ID // 尝试将关键字转换为整数ID
keywordInt, err := strconv.Atoi(keyword) keywordInt, err := strconv.Atoi(keyword)
if err == nil { if err == nil {
// 如果转换成功按照ID和可选的组别搜索用户 // 如果转换成功按照ID和可选的组别搜索用户
query := DB.Unscoped().Omit("password").Where("`id` = ?", keywordInt) query := DB.Unscoped().Omit("password").Where("`id` = ?", keywordInt)
if group != "" { if group != "" {
query = query.Where("`group` = ?", group) // 使用反引号包围group query = query.Where("`group` = ?", group) // 使用反引号包围group
} }
err = query.Find(&users).Error err = query.Find(&users).Error
if err != nil || len(users) > 0 { if err != nil || len(users) > 0 {
return users, err return users, err
} }
} }
err = nil err = nil
query := DB.Unscoped().Omit("password") query := DB.Unscoped().Omit("password")
likeCondition := "`username` LIKE ? OR `email` LIKE ? OR `display_name` LIKE ?" likeCondition := "`username` LIKE ? OR `email` LIKE ? OR `display_name` LIKE ?"
if group != "" { if group != "" {
query = query.Where("("+likeCondition+") AND `group` = ?", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", group) query = query.Where("("+likeCondition+") AND `group` = ?", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", group)
} else { } else {
query = query.Where(likeCondition, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%") query = query.Where(likeCondition, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
} }
err = query.Find(&users).Error err = query.Find(&users).Error
return users, err return users, err
} }
func GetUserById(id int, selectAll bool) (*User, error) { func GetUserById(id int, selectAll bool) (*User, error) {
@ -244,7 +244,7 @@ func (user *User) Update(updatePassword bool) error {
return err return err
} }
func (user *User) UpdateAll(updatePassword bool) error { func (user *User) Edit(updatePassword bool) error {
var err error var err error
if updatePassword { if updatePassword {
user.Password, err = common.Password2Hash(user.Password) user.Password, err = common.Password2Hash(user.Password)
@ -254,7 +254,13 @@ func (user *User) UpdateAll(updatePassword bool) error {
} }
newUser := *user newUser := *user
DB.First(&user, user.Id) DB.First(&user, user.Id)
err = DB.Model(user).Select("*").Updates(newUser).Error err = DB.Model(user).Updates(map[string]interface{}{
"username": newUser.Username,
"password": newUser.Password,
"display_name": newUser.DisplayName,
"group": newUser.Group,
"quota": newUser.Quota,
}).Error
if err == nil { if err == nil {
if common.RedisEnabled { if common.RedisEnabled {
_ = common.RedisSet(fmt.Sprintf("user_group:%d", user.Id), user.Group, time.Duration(UserId2GroupCacheSeconds)*time.Second) _ = common.RedisSet(fmt.Sprintf("user_group:%d", user.Id), user.Group, time.Duration(UserId2GroupCacheSeconds)*time.Second)