admin_user.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package api
  2. import (
  3. "context"
  4. "encoding/base64"
  5. "entrance-grpc/iam"
  6. "gadmin/config"
  7. "gadmin/internal/admin/consts"
  8. "gadmin/internal/admin/forms"
  9. "gadmin/internal/admin/service"
  10. "gadmin/utility/serializer"
  11. "gadmin/utility/token"
  12. "github.com/gin-gonic/gin"
  13. jsoniter "github.com/json-iterator/go"
  14. "github.com/sirupsen/logrus"
  15. "strconv"
  16. "time"
  17. )
  18. func UserLogin(c *gin.Context) {
  19. ip := c.ClientIP()
  20. var req forms.UserLoginReq
  21. if err := c.ShouldBind(&req); err == nil {
  22. res := service.User.Login(req, ip)
  23. c.JSON(200, res)
  24. } else {
  25. c.JSON(200, ErrorResponse(err))
  26. }
  27. }
  28. func UserLogout(c *gin.Context) {
  29. encodeToken := token.GetAuthorization(c)
  30. if encodeToken == "" {
  31. c.JSON(200, serializer.CheckLogin())
  32. return
  33. }
  34. bytesT, err := base64.URLEncoding.DecodeString(encodeToken)
  35. if err != nil {
  36. logrus.Warningf("middleware base64.URLEncoding.DecodeString:%+v", err.Error())
  37. c.JSON(200, serializer.CheckLogin())
  38. return
  39. }
  40. t := string(bytesT)
  41. err = service.User.Logout(t)
  42. if err != nil {
  43. logrus.Warningf("middleware UserLogout:%+v", err.Error())
  44. c.JSON(200, serializer.CheckLogin())
  45. return
  46. }
  47. c.JSON(200, serializer.Suc(nil, "退出成功"))
  48. }
  49. //func UserMe(c *gin.Context) {
  50. // var (
  51. // user = token.CurrentUser(c)
  52. // )
  53. // permissions := make([]forms.UserLoginPermissions, 0)
  54. // permissions = append(permissions, forms.UserLoginPermissions{
  55. // Label: "控制台",
  56. // Value: "value",
  57. // })
  58. // //获取用户角色权限
  59. // roleInfo, err := service.AdminRole.GetRole(c, forms.AdminRoleReq{ID: user.RoleId})
  60. // if err != nil || roleInfo == nil {
  61. // c.JSON(200, ErrorResponse(err))
  62. // return
  63. // }
  64. // if roleInfo.Key == "super" {
  65. // for k, _ := range config.AuthMenuMap {
  66. // permissions = append(permissions, forms.UserLoginPermissions{
  67. // Label: config.AuthNameMap[k],
  68. // Value: config.AuthMenuMap[k],
  69. // })
  70. // }
  71. // } else {
  72. // rpdb := query.Use(config.AdminDB).AdminRolePermission
  73. // rolePermission := make([]int, 0)
  74. // err = rpdb.Where(rpdb.SystemID.Eq(user.SystemId)).Pluck(rpdb.PermissionID, &rolePermission)
  75. // //err = json.Unmarshal([]byte(roleInfo.Permissions), &rolePermission)
  76. // if err != nil {
  77. // c.JSON(200, ErrorResponse(err))
  78. // return
  79. // }
  80. // for _, v := range rolePermission {
  81. // if _, ok := config.AuthMenuMap[v]; ok {
  82. // permissions = append(permissions, forms.UserLoginPermissions{
  83. // Label: config.AuthNameMap[v],
  84. // Value: config.AuthMenuMap[v],
  85. // })
  86. // }
  87. // }
  88. // }
  89. //
  90. // //将权限赋值给permission
  91. //
  92. // info := forms.UserMeReq{
  93. // ID: user.ID,
  94. // UserName: user.UserName,
  95. // RoleId: user.RoleId,
  96. // Avatar: user.Avatar,
  97. // Nickname: user.Nickname,
  98. // Permissions: permissions,
  99. // IsSuper: user.UserName == "admin",
  100. // }
  101. //
  102. // c.JSON(200, serializer.Suc(info, "获取成功"))
  103. //}
  104. func AdminUserList(c *gin.Context) {
  105. var req forms.AdminUserListReq
  106. if err := c.ShouldBind(&req); err != nil {
  107. c.JSON(200, ErrorResponse(err))
  108. return
  109. }
  110. if err := forms.ParseParams(&req); err != nil {
  111. c.JSON(200, ErrorResponse(err))
  112. return
  113. }
  114. c.JSON(200, service.User.List(c, req))
  115. }
  116. func AdminUserEdit(c *gin.Context) {
  117. var req forms.AdminUserEditReq
  118. if err := c.ShouldBind(&req); err != nil {
  119. c.JSON(200, ErrorResponse(err))
  120. return
  121. }
  122. if err := forms.ParseParams(&req); err != nil {
  123. c.JSON(200, ErrorResponse(err))
  124. return
  125. }
  126. c.JSON(200, service.User.Edit(c, req))
  127. }
  128. func RolePermission(c *gin.Context) {
  129. is, err := service.User.GetUserRolePermission(c)
  130. if err != nil {
  131. c.JSON(200, ErrorResponse(err))
  132. return
  133. }
  134. c.JSON(200, serializer.Suc(is, "获取成功"))
  135. }
  136. type AdminIamServer struct {
  137. iam.UnimplementedIamServer
  138. }
  139. func (s *AdminIamServer) CheckToken(ctx context.Context, req *iam.CheckTokenReq) (*iam.CheckTokenResp, error) {
  140. resp := &iam.CheckTokenResp{}
  141. tokenKey := config.GetTokenKey(req.GetToken())
  142. if config.TokenRedis.Exists(tokenKey).Val() == 0 {
  143. resp.Code = consts.CodeCheckLogin
  144. resp.Msg = "未登录"
  145. return resp, nil
  146. }
  147. userStr := config.TokenRedis.Get(tokenKey).Val()
  148. user := new(token.UserClaims)
  149. if err := jsoniter.UnmarshalFromString(userStr, user); err != nil {
  150. logrus.Warningf("middleware jsoniter.UnmarshalFromString:%+v", err.Error())
  151. resp.Code = consts.CodeCheckLogin
  152. resp.Msg = "未登录"
  153. return resp, nil
  154. }
  155. if user.ID == 0 {
  156. resp.Code = consts.CodeCheckLogin
  157. resp.Msg = "未登录"
  158. return resp, nil
  159. }
  160. // 查询登录token是否有效
  161. now := time.Now()
  162. key := config.GetUserTokenKey(user.ID)
  163. tokenCTStr := config.TokenRedis.HGet(key, req.GetToken()).Val()
  164. tokenCreateTime, err := strconv.Atoi(tokenCTStr)
  165. if err != nil {
  166. logrus.Warningf("middleware config.LogRedis.HGet:%+v", err.Error())
  167. resp.Code = consts.CodeCheckLogin
  168. resp.Msg = "未登录"
  169. return resp, nil
  170. }
  171. tokenCT := time.Unix(int64(tokenCreateTime), 0)
  172. if tokenCT.Before(now.Add(-config.TokenExpireTime)) {
  173. config.TokenRedis.HDel(key, req.GetToken())
  174. resp.Code = consts.CodeCheckLogin
  175. resp.Msg = "未登录"
  176. return resp, nil
  177. }
  178. config.TokenRedis.HSet(key, req.GetToken(), now.Unix())
  179. config.TokenRedis.Expire(key, time.Hour*12)
  180. config.TokenRedis.Expire(tokenKey, time.Hour*12)
  181. resp.Data = &iam.AdminUserInfo{
  182. ID: user.ID,
  183. RoleID: user.RoleId,
  184. UserName: user.UserName,
  185. NickName: user.Nickname,
  186. Avatar: user.Avatar,
  187. }
  188. return resp, nil
  189. }
  190. func (s *AdminIamServer) GetAdminUserByID(ctx context.Context, req *iam.GetAdminUserByIDReq) (*iam.GetAdminUserByIDResp, error) {
  191. user, err := service.User.GetUserInfoByID(ctx, req.GetUID())
  192. resp := &iam.GetAdminUserByIDResp{}
  193. if err != nil {
  194. resp.Code = 1
  195. resp.Msg = err.Error()
  196. }
  197. resp.Data = user
  198. return resp, nil
  199. }
  200. func (s *AdminIamServer) BatchGetAdminUser(ctx context.Context, req *iam.BatchGetAdminUserReq) (*iam.BatchGetAdminUserResp, error) {
  201. users, err := service.User.BatchGetUsers(ctx, req.GetUIds())
  202. resp := &iam.BatchGetAdminUserResp{}
  203. if err != nil {
  204. resp.Code = 1
  205. resp.Msg = err.Error()
  206. } else {
  207. resp.Data = users
  208. }
  209. return resp, nil
  210. }
  211. func (s *AdminIamServer) GetAdminUserByNickName(ctx context.Context, req *iam.GetAdminUserByNickNameReq) (*iam.GetAdminUserByNickNameResp, error) {
  212. resp := &iam.GetAdminUserByNickNameResp{}
  213. user, err := service.User.GetUserByNickName(ctx, req.GetNickName())
  214. if err != nil {
  215. resp.Code = 1
  216. resp.Msg = err.Error()
  217. } else {
  218. resp.Data = user
  219. }
  220. return resp, nil
  221. }
  222. func (s *AdminIamServer) GetRoleSystems(ctx context.Context, req *iam.GetRoleSystemsReq) (*iam.GetRoleSystemsResp, error) {
  223. resp := &iam.GetRoleSystemsResp{}
  224. systems, err := service.User.GetRoleSystems(ctx, req.GetRoleID())
  225. if err != nil {
  226. resp.Code = 1
  227. resp.Msg = err.Error()
  228. } else {
  229. resp.Data = systems
  230. }
  231. return resp, nil
  232. }
  233. func (s *AdminIamServer) DeleteToken(ctx context.Context, req *iam.DeleteTokenReq) (*iam.DeleteTokenResp, error) {
  234. resp := &iam.DeleteTokenResp{}
  235. err := service.User.Logout(req.GetToken())
  236. if err != nil {
  237. resp.Code = 1
  238. resp.Msg = err.Error()
  239. }
  240. return resp, nil
  241. }