kra/internal/server/middleware/gin_casbin.go

66 lines
1.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package middleware
import (
"strconv"
"strings"
"kra/pkg/casbin"
"kra/pkg/response"
"kra/pkg/utils"
"github.com/gin-gonic/gin"
)
// CasbinConfig Casbin中间件配置
type CasbinConfig struct {
RouterPrefix string // 路由前缀,需要从路径中去除
}
// 全局配置
var casbinConfig *CasbinConfig
// SetCasbinConfig 设置Casbin配置
func SetCasbinConfig(cfg *CasbinConfig) {
casbinConfig = cfg
}
// CasbinHandler Casbin权限拦截器与 kra 保持一致)
func CasbinHandler() gin.HandlerFunc {
return func(c *gin.Context) {
waitUse, _ := utils.GetClaims(c)
if waitUse == nil {
response.FailWithDetailed(gin.H{}, "权限不足", c)
c.Abort()
return
}
// 获取请求的PATH
path := c.Request.URL.Path
// 去除路由前缀
if casbinConfig != nil && casbinConfig.RouterPrefix != "" {
path = strings.TrimPrefix(path, casbinConfig.RouterPrefix)
}
// 获取请求方法
act := c.Request.Method
// 获取用户的角色
sub := strconv.Itoa(int(waitUse.AuthorityID))
// 判断策略中是否存在
e := casbin.GetEnforcer()
if e == nil {
response.FailWithDetailed(gin.H{}, "Casbin未初始化", c)
c.Abort()
return
}
success, _ := e.Enforce(sub, path, act)
if !success {
response.FailWithDetailed(gin.H{}, "权限不足", c)
c.Abort()
return
}
c.Next()
}
}