admin_user.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  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. Data: &iam.AdminUserInfo{},
  142. }
  143. tokenKey := config.GetTokenKey(req.GetToken())
  144. if config.TokenRedis.Exists(tokenKey).Val() == 0 {
  145. resp.Code = consts.CodeCheckLogin
  146. resp.Msg = "未登录"
  147. return resp, nil
  148. }
  149. userStr := config.TokenRedis.Get(tokenKey).Val()
  150. user := new(token.UserClaims)
  151. if err := jsoniter.UnmarshalFromString(userStr, user); err != nil {
  152. logrus.Warningf("middleware jsoniter.UnmarshalFromString:%+v", err.Error())
  153. resp.Code = consts.CodeCheckLogin
  154. resp.Msg = "未登录"
  155. return resp, nil
  156. }
  157. if user.ID == 0 {
  158. resp.Code = consts.CodeCheckLogin
  159. resp.Msg = "未登录"
  160. return resp, nil
  161. }
  162. // 查询登录token是否有效
  163. now := time.Now()
  164. key := config.GetUserTokenKey(user.ID)
  165. tokenCTStr := config.TokenRedis.HGet(key, req.GetToken()).Val()
  166. tokenCreateTime, err := strconv.Atoi(tokenCTStr)
  167. if err != nil {
  168. logrus.Warningf("middleware config.LogRedis.HGet:%+v", err.Error())
  169. resp.Code = consts.CodeCheckLogin
  170. resp.Msg = "未登录"
  171. return resp, nil
  172. }
  173. tokenCT := time.Unix(int64(tokenCreateTime), 0)
  174. if tokenCT.Before(now.Add(-config.TokenExpireTime)) {
  175. config.TokenRedis.HDel(key, req.GetToken())
  176. resp.Code = consts.CodeCheckLogin
  177. resp.Msg = "未登录"
  178. return resp, nil
  179. }
  180. config.TokenRedis.HSet(key, req.GetToken(), now.Unix())
  181. config.TokenRedis.Expire(key, time.Hour*12)
  182. config.TokenRedis.Expire(tokenKey, time.Hour*12)
  183. resp.Data = &iam.AdminUserInfo{
  184. ID: user.ID,
  185. RoleID: user.RoleId,
  186. UserName: user.UserName,
  187. NickName: user.Nickname,
  188. Avatar: user.Avatar,
  189. }
  190. return resp, nil
  191. }
  192. func (s *AdminIamServer) GetAdminUserByID(ctx context.Context, req *iam.GetAdminUserByIDReq) (*iam.GetAdminUserByIDResp, error) {
  193. user, err := service.User.GetUserInfoByID(ctx, req.GetUID())
  194. resp := &iam.GetAdminUserByIDResp{}
  195. if err != nil {
  196. resp.Code = 1
  197. resp.Msg = err.Error()
  198. }
  199. resp.Data = user
  200. return resp, nil
  201. }
  202. func (s *AdminIamServer) BatchGetAdminUser(ctx context.Context, req *iam.BatchGetAdminUserReq) (*iam.BatchGetAdminUserResp, error) {
  203. users, err := service.User.BatchGetUsers(ctx, req.GetUIds())
  204. resp := &iam.BatchGetAdminUserResp{}
  205. if err != nil {
  206. resp.Code = 1
  207. resp.Msg = err.Error()
  208. resp.Data = []*iam.AdminUserInfo{}
  209. } else {
  210. resp.Data = users
  211. }
  212. return resp, nil
  213. }
  214. func (s *AdminIamServer) GetAdminUserByNickName(ctx context.Context, req *iam.GetAdminUserByNickNameReq) (*iam.GetAdminUserByNickNameResp, error) {
  215. resp := &iam.GetAdminUserByNickNameResp{}
  216. user, err := service.User.GetUserByNickName(ctx, req.GetNickName())
  217. if err != nil {
  218. resp.Code = 1
  219. resp.Msg = err.Error()
  220. resp.Data = &iam.AdminUserInfo{}
  221. } else {
  222. resp.Data = user
  223. }
  224. return resp, nil
  225. }
  226. func (s *AdminIamServer) GetRoleSystems(ctx context.Context, req *iam.GetRoleSystemsReq) (*iam.GetRoleSystemsResp, error) {
  227. resp := &iam.GetRoleSystemsResp{}
  228. systems, err := service.User.GetRoleSystems(ctx, req.GetRoleID())
  229. if err != nil {
  230. resp.Code = 1
  231. resp.Msg = err.Error()
  232. resp.Data = []*iam.SystemInfo{}
  233. } else {
  234. resp.Data = systems
  235. }
  236. return resp, nil
  237. }
  238. func (s *AdminIamServer) DeleteToken(ctx context.Context, req *iam.DeleteTokenReq) (*iam.DeleteTokenResp, error) {
  239. resp := &iam.DeleteTokenResp{}
  240. err := service.User.Logout(req.GetToken())
  241. if err != nil {
  242. resp.Code = 1
  243. resp.Msg = err.Error()
  244. }
  245. return resp, nil
  246. }