diff --git a/app/admin/apis/sys_user/sys_user.go b/app/admin/apis/sys_user/sys_user.go index 6b327fba..dc5918ce 100644 --- a/app/admin/apis/sys_user/sys_user.go +++ b/app/admin/apis/sys_user/sys_user.go @@ -326,16 +326,13 @@ func (e *SysUser) SysUserUpdatePwd(c *gin.Context) { // 数据权限检查 p := actions.GetPermissionFromContext(c) - object := &system.SysUser{ - UserId: p.UserId, - Password: pwd.Password, - } serviceSysUser := service.SysUser{} serviceSysUser.Orm = db serviceSysUser.Log = log - err = serviceSysUser.UpdateSysUser(object, p) + err = serviceSysUser.UpdateSysUserPwd(user.GetUserId(c), pwd.OldPassword, pwd.NewPassword, p) if err != nil { log.Error(err) + e.Error(c, http.StatusForbidden, err, "密码修改失败") return } e.OK(c, nil, "密码修改成功") diff --git a/app/admin/models/system/login.go b/app/admin/models/system/login.go index 1963eb2b..072d6ed9 100644 --- a/app/admin/models/system/login.go +++ b/app/admin/models/system/login.go @@ -1,7 +1,6 @@ package system import ( - "fmt" log "github.com/go-admin-team/go-admin-core/logger" "github.com/go-admin-team/go-admin-core/sdk/pkg" "gorm.io/gorm" @@ -20,7 +19,6 @@ func (u *Login) GetUser(tx *gorm.DB) (user SysUser, role SysRole, err error) { log.Errorf("get user error, %s", err.Error()) return } - fmt.Println(user.Password, u.Password) _, err = pkg.CompareHashAndPassword(user.Password, u.Password) if err != nil { log.Errorf("user login error, %s", err.Error()) diff --git a/app/admin/service/dto/sys_user.go b/app/admin/service/dto/sys_user.go index ef0d6ee3..97826aca 100644 --- a/app/admin/service/dto/sys_user.go +++ b/app/admin/service/dto/sys_user.go @@ -113,5 +113,6 @@ func (s *SysUserById) GenerateM() (common.ActiveRecord, error) { // PassWord 密码 type PassWord struct { - Password string `json:"password"` + NewPassword string `json:"newPassword" binding:"required"` + OldPassword string `json:"oldPassword" binding:"required"` } diff --git a/app/admin/service/sys_user.go b/app/admin/service/sys_user.go index edbd2afc..8681a291 100644 --- a/app/admin/service/sys_user.go +++ b/app/admin/service/sys_user.go @@ -3,6 +3,8 @@ package service import ( "errors" + log "github.com/go-admin-team/go-admin-core/logger" + "github.com/go-admin-team/go-admin-core/sdk/pkg" "gorm.io/gorm" "go-admin/app/admin/models/system" @@ -115,29 +117,46 @@ func (e *SysUser) RemoveSysUser(d cDto.Control, c common.ActiveRecord, p *action } // UpdateSysUserPwd 修改SysUser对象密码 -func (e *SysUser) UpdateSysUserPwd(c *system.SysUser, p *actions.DataPermission) error { +func (e *SysUser) UpdateSysUserPwd(id int, oldPassword, newPassword string, p *actions.DataPermission) error { var err error - if c.Password == "" { + if newPassword == "" { return nil } + c := &system.SysUser{} - err = c.Encrypt() - if err != nil { - return err - } - - db := e.Orm.Model(c). + err = e.Orm.Model(c). Scopes( actions.Permission(c.TableName(), p), - ).Where(c.GetId()).Updates(c) - if db.Error != nil { + ).Where(id).Select("UserId", "Password", "Salt").First(c).Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("无权更新该数据") + } + e.Log.Errorf("db error: %s", err) + return err + } + var ok bool + ok, err = pkg.CompareHashAndPassword(c.Password, oldPassword) + if err != nil { + e.Log.Errorf("CompareHashAndPassword error, %s", err.Error()) + return err + } + if !ok { + err = errors.New("incorrect Password") + e.Log.Warnf("user[%d] %s", id, err.Error()) + return err + } + c.Password = newPassword + db := e.Orm.Model(c).Where(id).Select("Password", "Salt").Updates(c) + if err = db.Error; err != nil { e.Log.Errorf("db error: %s", err) return err } if db.RowsAffected == 0 { - return errors.New("无权更新该数据") - + err = errors.New("set password error") + log.Warnf("db update error") + return err } return nil } diff --git a/go.mod b/go.mod index 1457cd02..bbd8bffa 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5 github.com/casbin/casbin/v2 v2.25.1 github.com/gin-gonic/gin v1.6.3 - github.com/go-admin-team/go-admin-core v1.3.1-0.20210324084642-7c164d76fc11 + github.com/go-admin-team/go-admin-core v1.3.1 github.com/google/uuid v1.2.0 github.com/mojocn/base64Captcha v1.3.1 github.com/mssola/user_agent v0.5.2 diff --git a/template/v4/dto.go.template b/template/v4/dto.go.template index 1bc14b5a..fbb6a16e 100644 --- a/template/v4/dto.go.template +++ b/template/v4/dto.go.template @@ -33,7 +33,7 @@ func (m *{{.ClassName}}Search) Bind(ctx *gin.Context) error { log := api.GetRequestLogger(ctx) err := ctx.ShouldBind(m) if err != nil { - log.Debugf("ShouldBind error: %s", err.Error()) + log.Warnf("ShouldBind error: %s", err.Error()) } return err } @@ -63,12 +63,12 @@ func (s *{{.ClassName}}Control) Bind(ctx *gin.Context) error { log := api.GetRequestLogger(ctx) err := ctx.ShouldBindUri(s) if err != nil { - log.Debugf("ShouldBindUri error: %s", err.Error()) + log.Warnf("ShouldBindUri error: %s", err.Error()) return err } err = ctx.ShouldBind(s) if err != nil { - log.Debugf("ShouldBind error: %s", err.Error()) + log.Warnf("ShouldBind error: %s", err.Error()) } return err } @@ -111,12 +111,12 @@ func (s *{{.ClassName}}ById) Bind(ctx *gin.Context) error { log := api.GetRequestLogger(ctx) err := ctx.ShouldBindUri(s) if err != nil { - log.Debugf("ShouldBindUri error: %s", err.Error()) + log.Warnf("ShouldBindUri error: %s", err.Error()) return err } err = ctx.ShouldBind(s) if err != nil { - log.Debugf("ShouldBind error: %s", err.Error()) + log.Warnf("ShouldBind error: %s", err.Error()) } return err } diff --git a/template/v4/no_actions/apis.go.template b/template/v4/no_actions/apis.go.template index ae09942d..4af74e22 100644 --- a/template/v4/no_actions/apis.go.template +++ b/template/v4/no_actions/apis.go.template @@ -147,7 +147,7 @@ func (e *{{.ClassName}}) Insert{{.ClassName}}(c *gin.Context) { service{{.ClassName}} := service.{{.ClassName}}{} service{{.ClassName}}.Orm = db service{{.ClassName}}.Log = log - err = service{{.ClassName}}.Insert{{.ClassName}}(object.(*(models.{{.ClassName}}))) + err = service{{.ClassName}}.Insert{{.ClassName}}(object.(*models.{{.ClassName}})) if err != nil { log.Errorf("Insert {{.ClassName}} error, %s", err.Error()) e.Error(c, http.StatusInternalServerError, err, "创建失败")