package middleware import ( "encoding/json" "strings" "yintai-api/app/common/cache" err2 "yintai-api/app/common/err" "yintai-api/app/common/model" "yintai-api/app/common/utils" "yintai-api/base/global" "github.com/gin-gonic/gin" ) func Login(c *gin.Context) { token := c.Request.Header.Get("token") token = strings.TrimSpace(token) if token == "" { err2.TokenErr(" token not exists") c.Abort() return } key := cache.NewKeys().User() + token if res := global.GetRedis().Get(key); res.Val() == "" { err2.TokenErr(" token not exists", res.Err()) c.Abort() return } c.Next() } // Permission user router permission check func Permission() gin.HandlerFunc { return func(c *gin.Context) { token := c.Request.Header.Get("token") token = strings.TrimSpace(token) if token == "" { err2.TokenErr(" token not exists") c.Abort() return } key := cache.NewKeys().User() + token val := global.GetRedis().Get(key).Val() if val == "" { err2.TokenErr(" token not exists") c.Abort() return } var user *model.UserWithRole err := json.Unmarshal([]byte(val), &user) if err != nil { err2.TokenErr(" token not exists") } key = cache.NewKeys().Api(user.RoleID) member := utils.SourceFormat(c.Request.Method, c.FullPath()) // skip no auth if noAuth(member) { c.Next() } if val := global.GetRedis().SIsMember(key, member); !val.Val() { err2.PriErr(" no permission", val.Err()) c.Abort() return } c.Next() } } // 不需要鉴权的接口 func noAuth(source string) bool { type no struct { Method string Url string } x := make([]no, 0) x = append(x, no{"POST", "/yt/user/login"}) for _, v := range x { if source == utils.SourceFormat(v.Method, v.Url) { return true } } return false }