package controller import ( "context" "github.com/gogf/gf/v2/crypto/gmd5" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gmode" "github.com/tiger1103/gfast/v3/api/v1/system" commonService "github.com/tiger1103/gfast/v3/internal/app/common/service" "github.com/tiger1103/gfast/v3/internal/app/system/model" "github.com/tiger1103/gfast/v3/internal/app/system/model/entity" "github.com/tiger1103/gfast/v3/internal/app/system/service" "github.com/tiger1103/gfast/v3/library/libUtils" ) var ( User = userController{} ) type userController struct { BaseController } func (c *userController) Login(ctx context.Context, req *system.UserLoginReq) (res *system.UserLoginRes, err error) { var ( user *model.LoginUserRes token string permissions []string menuList []*model.UserMenus ) //判断验证码是否正确 debug := gmode.IsDevelop() if !debug { if !commonService.Captcha().VerifyString(req.VerifyKey, req.VerifyCode) { err = gerror.New("验证码输入错误") return } } ip := libUtils.GetClientIp(ctx) userAgent := libUtils.GetUserAgent(ctx) user, err = service.User().GetAdminUserByUsernamePassword(ctx, req) if err != nil { // 保存登录失败的日志信息 service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{ Status: 0, Username: req.Username, Ip: ip, UserAgent: userAgent, Msg: err.Error(), Module: "系统后台", }) return } err = service.User().UpdateLoginInfo(ctx, user.Id, ip) if err != nil { return } // 报存登录成功的日志信息 service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{ Status: 1, Username: req.Username, Ip: ip, UserAgent: userAgent, Msg: "登录成功", Module: "系统后台", }) key := gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword) if g.Cfg().MustGet(ctx, "gfToken.multiLogin").Bool() { key = gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword+ip+userAgent) } user.UserPassword = "" token, err = service.GfToken().GenerateToken(ctx, key, user) if err != nil { return } //获取用户菜单数据 menuList, permissions, err = service.User().GetAdminRules(ctx, user.Id) if err != nil { return } res = &system.UserLoginRes{ UserInfo: user, Token: token, MenuList: menuList, Permissions: permissions, } return } // GetUserMenus 获取用户菜单及按钮权限 func (c *userController) GetUserMenus(ctx context.Context, req *system.UserMenusReq) (res *system.UserMenusRes, err error) { var ( permissions []string menuList []*model.UserMenus ) userId := service.Context().GetUserId(ctx) menuList, permissions, err = service.User().GetAdminRules(ctx, userId) res = &system.UserMenusRes{ MenuList: menuList, Permissions: permissions, } return } // List 用户列表 func (c *userController) List(ctx context.Context, req *system.UserSearchReq) (res *system.UserSearchRes, err error) { var ( total int userList []*entity.SysUser ) res = new(system.UserSearchRes) total, userList, err = service.User().List(ctx, req) if err != nil || total == 0 { return } res.Total = total res.UserList, err = service.User().GetUsersRoleDept(ctx, userList) return } // GetParams 获取用户维护相关参数 func (c *userController) GetParams(ctx context.Context, req *system.UserGetParamsReq) (res *system.UserGetParamsRes, err error) { res = new(system.UserGetParamsRes) res.RoleList, err = service.Role().GetRoleList(ctx) if err != nil { return } res.Posts, err = service.Post().GetUsedPost(ctx) return } // Add 添加用户 func (c *userController) Add(ctx context.Context, req *system.UserAddReq) (res *system.UserAddRes, err error) { err = service.User().Add(ctx, req) return } // GetEditUser 获取修改用户信息 func (c *userController) GetEditUser(ctx context.Context, req *system.UserGetEditReq) (res *system.UserGetEditRes, err error) { res, err = service.User().GetEditUser(ctx, req.Id) return } // Edit 修改用户 func (c *userController) Edit(ctx context.Context, req *system.UserEditReq) (res *system.UserEditRes, err error) { err = service.User().Edit(ctx, req) return } // ResetPwd 重置密码 func (c *userController) ResetPwd(ctx context.Context, req *system.UserResetPwdReq) (res *system.UserResetPwdRes, err error) { err = service.User().ResetUserPwd(ctx, req) return } // SetStatus 修改用户状态 func (c *userController) SetStatus(ctx context.Context, req *system.UserStatusReq) (res *system.UserStatusRes, err error) { err = service.User().ChangeUserStatus(ctx, req) return } // Delete 删除用户 func (c *userController) Delete(ctx context.Context, req *system.UserDeleteReq) (res *system.UserDeleteRes, err error) { err = service.User().Delete(ctx, req.Ids) return }