108 lines
2.8 KiB
Go
108 lines
2.8 KiB
Go
package server
|
||
|
||
import (
|
||
"context"
|
||
|
||
"kra/internal/biz/system"
|
||
"kra/internal/conf"
|
||
handler "kra/internal/server/handler/system"
|
||
"kra/internal/server/middleware"
|
||
"kra/internal/server/router"
|
||
"kra/pkg/jwt"
|
||
|
||
"github.com/casbin/casbin/v2"
|
||
"github.com/gin-gonic/gin"
|
||
kgin "github.com/go-kratos/gin"
|
||
"github.com/go-kratos/kratos/v2/middleware/recovery"
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
// NewGinRouter 创建Gin路由引擎(交给kratos http server管理)
|
||
func NewGinRouter(
|
||
c *conf.Server,
|
||
logger *zap.Logger,
|
||
jwtPkg *jwt.JWT,
|
||
enforcer *casbin.SyncedCachedEnforcer,
|
||
jwtBlacklistUsecase *system.JwtBlacklistUsecase,
|
||
userUsecase *system.UserUsecase,
|
||
apiUsecase *system.ApiUsecase,
|
||
authorityUsecase *system.AuthorityUsecase,
|
||
authorityBtnUsecase *system.AuthorityBtnUsecase,
|
||
menuUsecase *system.MenuUsecase,
|
||
dictionaryUsecase *system.DictionaryUsecase,
|
||
casbinUsecase *system.CasbinUsecase,
|
||
operationRecordUsecase *system.OperationRecordUsecase,
|
||
paramsUsecase *system.ParamsUsecase,
|
||
) *gin.Engine {
|
||
gin.SetMode(gin.DebugMode)
|
||
|
||
engine := gin.New()
|
||
|
||
// 使用kratos中间件包装
|
||
engine.Use(kgin.Middlewares(recovery.Recovery()))
|
||
|
||
// 设置自定义中间件
|
||
engine.Use(middleware.GinRecovery(true))
|
||
engine.Use(middleware.Cors())
|
||
|
||
// 设置日志
|
||
middleware.SetRecoveryLogger(logger)
|
||
middleware.SetOperationLogger(logger)
|
||
|
||
// 设置JWT配置
|
||
middleware.SetJWTConfig(&middleware.JWTConfig{
|
||
JWT: jwtPkg,
|
||
BlacklistChecker: &blacklistChecker{uc: jwtBlacklistUsecase},
|
||
UseMultipoint: false,
|
||
})
|
||
|
||
// 设置Casbin配置
|
||
middleware.SetCasbinConfig(&middleware.CasbinConfig{
|
||
RouterPrefix: "",
|
||
})
|
||
|
||
// 初始化handler依赖
|
||
handler.InitUsecases(
|
||
userUsecase,
|
||
apiUsecase,
|
||
authorityUsecase,
|
||
authorityBtnUsecase,
|
||
menuUsecase,
|
||
dictionaryUsecase,
|
||
casbinUsecase,
|
||
jwtBlacklistUsecase,
|
||
operationRecordUsecase,
|
||
paramsUsecase,
|
||
)
|
||
handler.SetJWTInstance(jwtPkg)
|
||
|
||
// 创建路由组
|
||
publicGroup := engine.Group("")
|
||
privateGroup := engine.Group("")
|
||
privateGroup.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
|
||
|
||
// 注册路由
|
||
systemRouter := router.RouterGroupApp.System
|
||
systemRouter.InitBaseRouter(publicGroup)
|
||
systemRouter.InitUserRouter(privateGroup)
|
||
systemRouter.InitApiRouter(privateGroup, publicGroup)
|
||
systemRouter.InitAuthorityRouter(privateGroup)
|
||
systemRouter.InitMenuRouter(privateGroup)
|
||
systemRouter.InitDictionaryRouter(privateGroup)
|
||
systemRouter.InitCasbinRouter(privateGroup)
|
||
systemRouter.InitJwtRouter(privateGroup)
|
||
systemRouter.InitOperationRecordRouter(privateGroup)
|
||
systemRouter.InitParamsRouter(privateGroup)
|
||
|
||
return engine
|
||
}
|
||
|
||
// blacklistChecker JWT黑名单检查器
|
||
type blacklistChecker struct {
|
||
uc *system.JwtBlacklistUsecase
|
||
}
|
||
|
||
func (b *blacklistChecker) IsBlacklist(jwt string) bool {
|
||
return b.uc.IsBlacklist(context.Background(), jwt)
|
||
}
|