1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package middlewares
- import (
- "fmt"
- "net/http"
- "xugu_license/internal/global"
- "xugu_license/internal/models"
- tokens "xugu_license/internal/utils/token"
- "github.com/gin-gonic/gin"
- )
- type UserAuthInfo struct {
- *models.UserInfo
- Permission map[Permission]Permission
- }
- func JwtAuthMiddleware() gin.HandlerFunc {
- return func(c *gin.Context) {
- err := tokens.TokenValid(c)
- if err != nil {
- global.Logger.Errorln("token解析失败 ", err.Error())
- c.String(http.StatusUnauthorized, err.Error())
- c.Abort()
- return
- }
- userClaims, err := tokens.ExtractTokenID(c)
- if err != nil {
- global.Logger.Errorln("token认证失败 ", err.Error())
- c.JSON(http.StatusBadRequest, gin.H{
- "error": err.Error(),
- })
- return
- }
- userInfo, err := models.GetUserInfoByID(userClaims.UserId)
- if err != nil {
- global.Logger.Errorln("认证获取用户失败 ", err.Error())
- c.JSON(http.StatusBadRequest, gin.H{
- "error": fmt.Sprintln("认证获取用户失败: ", err.Error()),
- })
- return
- }
- uAuthInfo := UserAuthInfo{userInfo, make(map[Permission]Permission)}
- //获取用户的权限
- roleKey := userInfo.Role
- if role, exists := Roles[roleKey]; exists {
- // 如果存在,可以在这里使用 role 进行后续操作
- //role.Permissions
- for _, p := range role.Permissions {
- uAuthInfo.Permission[p] = p
- }
- } else {
- // 如果不存在,进行相应的处理
- global.Logger.Errorln("Role does not exist ")
- c.JSON(http.StatusBadRequest, gin.H{"error": "invalid role"})
- c.Abort()
- return
- }
- global.Logger.Info("JwtAuthMiddleware u", uAuthInfo)
- c.Set("userInfo", &uAuthInfo)
- c.Next()
- }
- }
|