40 lines
822 B
Go
40 lines
822 B
Go
package middleware
|
||
|
||
import (
|
||
"github.com/gin-gonic/gin"
|
||
"mc-client-updater-server/internal/service"
|
||
"mc-client-updater-server/pkg/result"
|
||
"strings"
|
||
)
|
||
|
||
func AdminRequired(c *gin.Context) {
|
||
res := result.NewResult(c)
|
||
authorization := c.GetHeader("Authorization")
|
||
if authorization == "" {
|
||
res.Unauthorized()
|
||
return
|
||
}
|
||
|
||
split := strings.Split(authorization, " ")
|
||
if len(split) <= 1 || (len(split) >= 2 && split[0] != "Bearer") {
|
||
res.BadRequest()
|
||
return
|
||
}
|
||
|
||
tokenSrv := service.NewTokenService(c)
|
||
token := split[1]
|
||
tokenRow, ok := tokenSrv.VerifyToken(token)
|
||
// 若!ok,则返回值已被service处理,无需再次返回
|
||
if !ok {
|
||
return
|
||
}
|
||
|
||
userSrv := service.NewUserService(c)
|
||
hasRole := userSrv.JudgeRoleByToken("ROLE_admin", tokenRow)
|
||
if !hasRole {
|
||
res.NoPermission()
|
||
return
|
||
}
|
||
c.Next()
|
||
}
|