package user import ( "context" "time" "perms-system-server/internal/consts" "perms-system-server/internal/middleware" "perms-system-server/internal/response" "perms-system-server/internal/svc" "perms-system-server/internal/types" "perms-system-server/internal/util" "github.com/zeromicro/go-zero/core/logx" ) type UpdateUserLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewUpdateUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateUserLogic { return &UpdateUserLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *UpdateUserLogic) UpdateUser(req *types.UpdateUserReq) error { caller := middleware.GetUserDetails(l.ctx) if caller == nil { return response.ErrUnauthorized("未登录") } if caller.UserId == req.Id { if req.DeptId != nil || req.Status != 0 { return response.ErrForbidden("不允许修改自己的部门和状态") } } else { if !caller.IsSuperAdmin { return response.ErrForbidden("仅允许修改自己的信息或超管操作") } } user, err := l.svcCtx.SysUserModel.FindOne(l.ctx, req.Id) if err != nil { return response.ErrNotFound("用户不存在") } if req.Nickname != nil { user.Nickname = *req.Nickname } if req.Email != nil { if *req.Email != "" && !util.IsValidEmail(*req.Email) { return response.ErrBadRequest("邮箱格式不正确") } user.Email = *req.Email } if req.Phone != nil { if *req.Phone != "" && !util.IsValidPhone(*req.Phone) { return response.ErrBadRequest("手机号格式不正确") } user.Phone = *req.Phone } if req.Remark != nil { user.Remark = *req.Remark } if req.DeptId != nil { if *req.DeptId > 0 { if _, err := l.svcCtx.SysDeptModel.FindOne(l.ctx, *req.DeptId); err != nil { return response.ErrBadRequest("部门不存在") } } user.DeptId = *req.DeptId } if req.Status == consts.StatusEnabled || req.Status == consts.StatusDisabled { user.Status = req.Status } user.UpdateTime = time.Now().Unix() if err := l.svcCtx.SysUserModel.Update(l.ctx, user); err != nil { return err } l.svcCtx.UserDetailsLoader.Clean(l.ctx, req.Id) return nil }