user.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package user
  2. import (
  3. . "config"
  4. "errors"
  5. "github.com/gorilla/sessions"
  6. "log"
  7. "qfw/util"
  8. "time"
  9. thisModel "github.com/baiy/Cadmin-server-go/models/user"
  10. "github.com/baiy/Cadmin-server-go/models/userGroup"
  11. "github.com/baiy/Cadmin-server-go/system/utils"
  12. "github.com/baiy/Cadmin-server-go/admin"
  13. index_ "github.com/baiy/Cadmin-server-go/system/index"
  14. "github.com/doug-martin/goqu/v9"
  15. )
  16. var store = sessions.NewCookieStore([]byte("something-very-secret-save"))
  17. func Lists(context *admin.Context) (interface{}, error) {
  18. userId := context.User.Id
  19. param := new(struct {
  20. utils.Page
  21. Keyword string `form:"keyword"`
  22. })
  23. err := context.Form(param)
  24. if err != nil {
  25. return nil, err
  26. }
  27. updateAuth := false
  28. delAuth := false
  29. if updateError := thisModel.CheckAuth(userId, 11); updateError == nil {
  30. updateAuth = true
  31. }
  32. if delError := thisModel.CheckAuth(userId, 12); delError == nil {
  33. delAuth = true
  34. }
  35. lists := make([]struct {
  36. thisModel.Model
  37. UserGroup []*userGroup.Model `db:"-" json:"userGroup"`
  38. }, 0)
  39. where := make(goqu.Ex)
  40. if param.Keyword != "" {
  41. where["username"] = goqu.Op{"like": "%" + param.Keyword + "%"}
  42. }
  43. total, err := param.Select("admin_user", &lists, where)
  44. if err != nil {
  45. return nil, err
  46. }
  47. for index := range lists {
  48. lists[index].UserGroup, _ = userGroup.GetLists(lists[index].UserGroupIds())
  49. }
  50. return map[string]interface{}{
  51. "lists": lists,
  52. "total": total,
  53. "updateAuth": updateAuth,
  54. "delAuth": delAuth,
  55. }, nil
  56. }
  57. func Save(context *admin.Context) (interface{}, error) {
  58. param := new(struct {
  59. Id int `form:"id"`
  60. Username string `form:"username" validate:"required"`
  61. Password string `form:"password"`
  62. Description string `form:"description"`
  63. Status int `form:"status" validate:"required"`
  64. Phone string `form:"phone" `
  65. PhoneCode string `form:"phoneCode"`
  66. LoginType string `form:"loginType"`
  67. })
  68. err := context.Form(param)
  69. if err != nil {
  70. return nil, err
  71. }
  72. password := ""
  73. if param.Password != "" {
  74. password = string(admin.Passworder.Hash([]byte(param.Password)))
  75. }
  76. if param.LoginType == "2" { //点击发送手机验证码
  77. phoneExist, _ := thisModel.GetByPhone(param.Phone)
  78. if phoneExist.Id > 0 {
  79. if phoneExist.Id != param.Id {
  80. return nil, errors.New("手机号已绑定其他账号")
  81. } else {
  82. return nil, errors.New("手机号与原手机号一致")
  83. }
  84. }
  85. if SendPhoneIdentCode(context, param.Phone) {
  86. return map[string]interface{}{"status": 3}, nil
  87. } else {
  88. return nil, errors.New("手机验证码发送失败")
  89. }
  90. } else if param.LoginType == "3" { //验证手机验证码
  91. session, err := store.Get(context.HttpRequest, "qmx_phone_code_save")
  92. if err != nil {
  93. log.Println("phone-session2获取失败")
  94. return nil, nil
  95. }
  96. if param.PhoneCode == "" {
  97. return nil, errors.New("手机验证码不能为空")
  98. }
  99. phoneCode := util.ObjToString(session.Values["code"])
  100. phone := util.ObjToString(session.Values["phone"])
  101. if phone != param.Phone || phoneCode != param.PhoneCode {
  102. return nil, errors.New("手机验证码错误")
  103. }
  104. }
  105. if param.Id == 0 {
  106. if param.Password == "" {
  107. return nil, errors.New("添加用户密码不能为空")
  108. }
  109. if param.Phone == "" {
  110. return nil, errors.New("添加用户手机号不能为空")
  111. }
  112. return nil, thisModel.Add(param.Username, password, param.Status, param.Description, param.Phone)
  113. }
  114. return nil, thisModel.Updata(param.Id, param.Username, password, param.Status, param.Description, param.Phone)
  115. }
  116. //发送验证码
  117. func SendPhoneIdentCode(context *admin.Context, phone string) bool {
  118. r := context.HttpRequest
  119. w := context.HttpResponseWriter
  120. session, err := store.Get(r, "qmx_phone_code_save")
  121. if err != nil {
  122. log.Println("phone-session1获取失败")
  123. return false
  124. }
  125. lastSentTime := util.Int64All(session.Values["identCodeTime"])
  126. //60秒之内不允许重复发
  127. if lastSentTime > 0 && time.Now().Unix()-lastSentTime <= 60 {
  128. return false
  129. }
  130. s_ranNum := util.GetRandom(6) //生成随机数
  131. session.Values["code"] = s_ranNum
  132. session.Values["phone"] = phone
  133. session.Values["identCodeTime"] = time.Now().Unix()
  134. session.Options.MaxAge = 300
  135. if err := session.Save(r, w); err != nil {
  136. log.Println("session1保存错误,验证码")
  137. }
  138. //发送短信
  139. //param := map[string]string{"code": s_ranNum}
  140. log.Println("短信验证码", phone, s_ranNum)
  141. index_.SendSMS(SysConfigs.SmsServiceRpc, phone, s_ranNum)
  142. return true
  143. }
  144. func Remove(context *admin.Context) (interface{}, error) {
  145. id, err := context.InputInt("id")
  146. if err != nil {
  147. return nil, err
  148. }
  149. return nil, thisModel.Remove(id)
  150. }