middlewares.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package middlewares
  2. import (
  3. "fmt"
  4. "net/http"
  5. "xugu_license/internal/global"
  6. "xugu_license/internal/models"
  7. tokens "xugu_license/internal/utils/token"
  8. "github.com/gin-gonic/gin"
  9. )
  10. type UserAuthInfo struct {
  11. *models.UserInfo
  12. Permission map[Permission]Permission
  13. }
  14. func JwtAuthMiddleware() gin.HandlerFunc {
  15. return func(c *gin.Context) {
  16. err := tokens.TokenValid(c)
  17. if err != nil {
  18. global.Logger.Errorln("token解析失败 ", err.Error())
  19. c.String(http.StatusUnauthorized, err.Error())
  20. c.Abort()
  21. return
  22. }
  23. userClaims, err := tokens.ExtractTokenID(c)
  24. if err != nil {
  25. global.Logger.Errorln("token认证失败 ", err.Error())
  26. c.JSON(http.StatusBadRequest, gin.H{
  27. "error": err.Error(),
  28. })
  29. return
  30. }
  31. userInfo, err := models.GetUserInfoByID(userClaims.UserId)
  32. if err != nil {
  33. global.Logger.Errorln("认证获取用户失败 ", err.Error())
  34. c.JSON(http.StatusBadRequest, gin.H{
  35. "error": fmt.Sprintln("认证获取用户失败: ", err.Error()),
  36. })
  37. return
  38. }
  39. uAuthInfo := UserAuthInfo{userInfo, make(map[Permission]Permission)}
  40. //获取用户的权限
  41. roleKey := userInfo.Role
  42. if role, exists := Roles[roleKey]; exists {
  43. // 如果存在,可以在这里使用 role 进行后续操作
  44. //role.Permissions
  45. for _, p := range role.Permissions {
  46. uAuthInfo.Permission[p] = p
  47. }
  48. } else {
  49. // 如果不存在,进行相应的处理
  50. global.Logger.Errorln("Role does not exist ")
  51. c.JSON(http.StatusBadRequest, gin.H{"error": "invalid role"})
  52. c.Abort()
  53. return
  54. }
  55. global.Logger.Info("JwtAuthMiddleware u", uAuthInfo)
  56. c.Set("userInfo", &uAuthInfo)
  57. c.Next()
  58. }
  59. }