user.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package model
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/710leo/urlooker/modules/web/g"
  6. . "github.com/710leo/urlooker/modules/web/store"
  7. "github.com/710leo/urlooker/modules/web/utils"
  8. )
  9. type User struct {
  10. Id int64 `json:"id"`
  11. Name string `json:"name"`
  12. Cnname string `json:"cnname"`
  13. Password string `json:"-"`
  14. Email string `json:"email"`
  15. Phone string `json:"phone"`
  16. Wechat string `json:"wechat"`
  17. Role int `json:"role"`
  18. Created time.Time `json:"-" xorm:"<-"`
  19. }
  20. func GetUserById(id int64) (*User, error) {
  21. var obj User
  22. has, err := Orm.Cols("id", "name", "cnname", "email", "phone", "wechat").Where("id=?", id).Get(&obj)
  23. if err != nil || !has {
  24. return nil, err
  25. }
  26. obj.Password = ""
  27. return &obj, nil
  28. }
  29. func GetUserPwById(id int64) (*User, error) {
  30. var obj User
  31. has, err := Orm.Cols("id", "name", "password").Where("id=?", id).Get(&obj)
  32. if err != nil || !has {
  33. return nil, err
  34. }
  35. return &obj, nil
  36. }
  37. // 先根据name获取id,再根据id去查询
  38. func CheckPw(name string, passwd string) (*User, error) {
  39. if name == "" {
  40. return nil, nil
  41. }
  42. var obj User
  43. has, err := Orm.Cols("id", "name", "cnname", "email", "phone", "wechat").Where("name=? and password=?", name, passwd).Get(&obj)
  44. if err != nil || !has {
  45. return nil, err
  46. }
  47. return &obj, nil
  48. }
  49. // 先根据name获取id,再根据id去查询
  50. func GetUserByName(name string) (*User, error) {
  51. if name == "" {
  52. return nil, nil
  53. }
  54. var obj User
  55. has, err := Orm.Cols("id", "name", "cnname", "email", "phone", "wechat").Where("name=?", name).Get(&obj)
  56. if err != nil || !has {
  57. return nil, err
  58. }
  59. return &obj, nil
  60. }
  61. func QueryUsers(query string, limit int) ([]*User, error) {
  62. users := make([]*User, 0)
  63. if query == "" {
  64. return users, nil
  65. }
  66. err := Orm.Cols("id", "name", "cnname", "email", "phone", "wechat").Where("name LIKE ?", "%"+query+"%").Limit(limit).Find(&users)
  67. if err != nil {
  68. return users, err
  69. }
  70. return users, nil
  71. }
  72. func AdminRegister() error {
  73. count, err := Orm.Count(new(User))
  74. if err != nil {
  75. return err
  76. }
  77. if count > 0 {
  78. return nil
  79. }
  80. user := &User{Name: "admin", Password: utils.EncryptPassword(g.Config.Salt, "password")}
  81. _, err = Orm.Insert(user)
  82. if err != nil {
  83. return err
  84. }
  85. return nil
  86. }
  87. func UserRegister(name, password string) (int64, error) {
  88. user, err := GetUserByName(name)
  89. if err != nil {
  90. return 0, err
  91. }
  92. if user != nil {
  93. return 0, fmt.Errorf("用户名已经被占用了")
  94. }
  95. user = &User{Name: name, Password: password}
  96. _, err = Orm.Insert(user)
  97. if err != nil {
  98. return 0, err
  99. }
  100. return user.Id, nil
  101. }
  102. func UserLogin(name, password string) (int64, error) {
  103. user, err := CheckPw(name, password)
  104. if err != nil {
  105. return 0, err
  106. }
  107. if user == nil {
  108. return 0, fmt.Errorf("密码不正确")
  109. }
  110. return user.Id, nil
  111. }
  112. func (this *User) UpdateProfile() error {
  113. _, err := Orm.Id(this.Id).Update(this)
  114. if err != nil {
  115. return err
  116. }
  117. return err
  118. }
  119. func (this *User) Save() error {
  120. _, err := Orm.Insert(this)
  121. return err
  122. }
  123. func (this *User) ChangePasswd(oldPasswd, newPasswd string) error {
  124. if this.Password != oldPasswd {
  125. return fmt.Errorf("原密码不正确")
  126. }
  127. this.Password = newPasswd
  128. _, err := Orm.Id(this.Id).Update(this)
  129. if err != nil {
  130. return err
  131. }
  132. return nil
  133. }