diff --git a/api/controller/user.go b/api/controller/user.go index 1e51b76..f61f78c 100644 --- a/api/controller/user.go +++ b/api/controller/user.go @@ -196,3 +196,33 @@ func (r *User) PutUser(c *gin.Context) { } responses.Ok(c) } + +// PutUserPassword 修改用户密码 +func (r *User) PutUserPassword(c *gin.Context) { + UserRequest := requests.UserRequest{} + if err := c.ShouldBind(&UserRequest.PutUserPassword); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(UserRequest.PutUserPassword); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + userId := c.GetInt64("UserId") + if userId == 0 { + responses.FailWithMessage("用户错误", c) + return + } + + // 业务处理 + userService := service.UserService{} + _, err := userService.PutUserPassword(userId, UserRequest.PutUserPassword) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) +} diff --git a/api/requests/post.go b/api/requests/post.go index 65096a5..bb706e9 100644 --- a/api/requests/post.go +++ b/api/requests/post.go @@ -9,8 +9,7 @@ type PostRequest struct { // AddPost 新增岗位 type AddPost struct { - PostName string `json:"dept_name" form:"dept_name" validate:"required" label:"岗位名称"` - PostStatus int `json:"dept_status" form:"dept_status" validate:"required,oneof=1 2" label:"岗位状态"` // (1:正常 2:删除) + PostName string `json:"dept_name" form:"dept_name" validate:"required" label:"岗位名称"` } // GetPostPage 获取岗位列表-分页 diff --git a/api/requests/user.go b/api/requests/user.go index 4abc40a..531bfcd 100644 --- a/api/requests/user.go +++ b/api/requests/user.go @@ -1,10 +1,11 @@ package requests type UserRequest struct { - GetUserPage // 获取用户列表-分页 - AddUser // 新增用户 - DeleteUser // 删除用户-批量 - PutUser // 修改用户 + GetUserPage // 获取用户列表-分页 + AddUser // 新增用户 + DeleteUser // 删除用户-批量 + PutUser // 修改用户 + PutUserPassword // 修改用户密码 } // GetUserPage 获取用户列表-分页 @@ -56,3 +57,9 @@ type PutUser struct { DeptID string `json:"dept_id" form:"dept_id" validate:"required" label:"部门"` PostID string `json:"post_id" form:"post_id" validate:"required" label:"岗位"` } + +// PutUserPassword 修改用户密码 +type PutUserPassword struct { + Password string `json:"password" form:"password" validate:"required" label:"原密码"` + NewPassword string `json:"new_password" form:"new_password" validate:"required" label:"新密码"` +} diff --git a/api/router/router.go b/api/router/router.go index f2cb7cc..bd36dd8 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -131,8 +131,8 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 修改用户 userGroup.PUT("/:user_id", api.User.PutUser) - // 修改用户 - userGroup.PUT("/password", api.User.PutUser) + // 修改用户密码 + userGroup.PUT("/password", api.User.PutUserPassword) } // 接口 diff --git a/api/service/user.go b/api/service/user.go index 1ae295e..323ee45 100644 --- a/api/service/user.go +++ b/api/service/user.go @@ -319,3 +319,55 @@ func (r *UserService) PutUser(c *gin.Context, requestUserId int64, putUserReques return true, nil } + +// PutUserPassword 修改用户密码 +func (r *UserService) PutUserPassword(requestUserId int64, putUserPasswordRequest requests.PutUserPassword) (bool, error) { + adminUserDao := dao.AdminUserDao{} + + // 获取需修改用户数据 + adminUser, err := adminUserDao.GetAdminUserFirstById(requestUserId) + if err != nil || adminUser == nil { + return false, errors.New("用户数据错误") + } + + // 加密旧密码 + newPassword := md5.Sum([]byte(putUserPasswordRequest.NewPassword + adminUser.Salt)) + // 将哈希值转换为16进制字符串 + newPasswordString := hex.EncodeToString(newPassword[:]) + + // 检测密码是否相同 + if adminUser.Password == newPasswordString { + return false, errors.New("新密码请不要和原密码相同") + } + + // 检测旧密码是否正确 + // 检测用户密码 + password := md5.Sum([]byte(putUserPasswordRequest.Password + adminUser.Salt)) + // 将哈希值转换为16进制字符串 + passwordString := hex.EncodeToString(password[:]) + + if passwordString != adminUser.Password { + return false, errors.New("原密码错误,请重新输入") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 修改角色 + data := make(map[string]interface{}) + data["password"] = newPasswordString + err = adminUserDao.EditAdminUserById(tx, requestUserId, data) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + tx.Commit() + + return true, nil +}