yintai2/app/admin/middleware/login.go

90 lines
1.9 KiB
Go

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("<login middleware> token not exists")
c.Abort()
return
}
key := cache.NewKeys().User() + token
if res := global.GetRedis().Get(key); res.Val() == "" {
err2.TokenErr("<login middleware> 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("<permission middleware> token not exists")
c.Abort()
return
}
key := cache.NewKeys().User() + token
val := global.GetRedis().Get(key).Val()
if val == "" {
err2.TokenErr("<permission middleware> token not exists")
c.Abort()
return
}
var user *model.UserWithRole
err := json.Unmarshal([]byte(val), &user)
if err != nil {
err2.TokenErr("<permission middleware> 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("<permission middleware> 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
}