user.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package controller
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/crypto/gmd5"
  5. "github.com/gogf/gf/v2/errors/gerror"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/os/genv"
  8. "github.com/gogf/gf/v2/util/gconv"
  9. "github.com/tiger1103/gfast/v3/api/v1/system"
  10. commonService "github.com/tiger1103/gfast/v3/internal/app/common/service"
  11. "github.com/tiger1103/gfast/v3/internal/app/system/model"
  12. "github.com/tiger1103/gfast/v3/internal/app/system/service"
  13. "github.com/tiger1103/gfast/v3/library/libUtils"
  14. )
  15. var (
  16. User = UserController{}
  17. )
  18. type UserController struct {
  19. baseController
  20. }
  21. func (c *UserController) Login(ctx context.Context, req *system.UserLoginReq) (res *system.UserLoginRes, err error) {
  22. var (
  23. user *model.LoginUserRes
  24. token string
  25. permissions []string
  26. menuList []*model.UserMenus
  27. )
  28. //判断验证码是否正确
  29. debug := genv.GetWithCmd("gf.debug")
  30. if debug.Int() != 1 {
  31. if !commonService.Captcha().VerifyString(req.VerifyKey, req.VerifyCode) {
  32. err = gerror.New("验证码输入错误")
  33. return
  34. }
  35. }
  36. ip := libUtils.GetClientIp(ctx)
  37. userAgent := libUtils.GetUserAgent(ctx)
  38. user, err = service.User().GetAdminUserByUsernamePassword(ctx, req)
  39. if err != nil {
  40. // 保存登录失败的日志信息
  41. service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{
  42. Status: 0,
  43. Username: req.Username,
  44. Ip: ip,
  45. UserAgent: userAgent,
  46. Msg: err.Error(),
  47. Module: "系统后台",
  48. })
  49. return
  50. }
  51. err = service.User().UpdateLoginInfo(ctx, user.Id, ip)
  52. if err != nil {
  53. return
  54. }
  55. // 报存登录成功的日志信息
  56. service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{
  57. Status: 1,
  58. Username: req.Username,
  59. Ip: ip,
  60. UserAgent: userAgent,
  61. Msg: "登录成功",
  62. Module: "系统后台",
  63. })
  64. key := gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword)
  65. if g.Cfg().MustGet(ctx, "gfToken.multiLogin").Bool() {
  66. key = gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword+ip+userAgent)
  67. }
  68. user.UserPassword = ""
  69. token, err = service.GfToken(ctx).GenerateToken(ctx, key, user)
  70. if err != nil {
  71. return
  72. }
  73. //获取用户菜单数据
  74. menuList, permissions, err = service.User().GetAdminRules(ctx, user.Id)
  75. if err != nil {
  76. return
  77. }
  78. res = &system.UserLoginRes{
  79. UserInfo: user,
  80. Token: token,
  81. MenuList: menuList,
  82. Permissions: permissions,
  83. }
  84. return
  85. }
  86. // GetUserMenus 获取用户菜单及按钮权限
  87. func (c *UserController) GetUserMenus(ctx context.Context, req *system.UserMenusReq) (res *system.UserMenusRes, err error) {
  88. var (
  89. permissions []string
  90. menuList []*model.UserMenus
  91. )
  92. userId := service.Context().GetUserId(ctx)
  93. menuList, permissions, err = service.User().GetAdminRules(ctx, userId)
  94. res = &system.UserMenusRes{
  95. MenuList: menuList,
  96. Permissions: permissions,
  97. }
  98. return
  99. }