2026-04-27 23:20:24 +08:00
|
|
|
|
package wire
|
2026-03-14 02:09:38 +08:00
|
|
|
|
|
|
|
|
|
|
import (
|
2026-04-22 16:01:59 +08:00
|
|
|
|
"with_you/internal/cache"
|
|
|
|
|
|
"with_you/internal/config"
|
|
|
|
|
|
"with_you/internal/repository"
|
|
|
|
|
|
"with_you/internal/service"
|
2026-03-14 02:09:38 +08:00
|
|
|
|
|
2026-03-14 18:01:55 +08:00
|
|
|
|
"github.com/casbin/casbin/v3"
|
|
|
|
|
|
gormadapter "github.com/casbin/gorm-adapter/v3"
|
2026-03-14 02:09:38 +08:00
|
|
|
|
"github.com/google/wire"
|
2026-03-17 00:47:17 +08:00
|
|
|
|
"go.uber.org/zap"
|
2026-03-14 02:09:38 +08:00
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// CasbinSet Casbin 相关 Provider Set
|
|
|
|
|
|
var CasbinSet = wire.NewSet(
|
|
|
|
|
|
ProvideCasbinEnforcer,
|
|
|
|
|
|
ProvideCasbinService,
|
|
|
|
|
|
ProvideRoleRepository,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// ProvideCasbinEnforcer 提供 Casbin Enforcer
|
|
|
|
|
|
func ProvideCasbinEnforcer(cfg *config.Config, db *gorm.DB) *casbin.Enforcer {
|
2026-03-14 18:01:55 +08:00
|
|
|
|
// 创建 GORM 适配器,连接数据库
|
|
|
|
|
|
adapter, err := gormadapter.NewAdapterByDB(db)
|
|
|
|
|
|
if err != nil {
|
2026-03-17 00:47:17 +08:00
|
|
|
|
zap.L().Fatal("Failed to create Casbin GORM adapter",
|
|
|
|
|
|
zap.Error(err),
|
|
|
|
|
|
)
|
2026-03-14 18:01:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建 Casbin Enforcer,使用数据库适配器
|
|
|
|
|
|
enforcer, err := casbin.NewEnforcer(cfg.Casbin.ModelPath, adapter)
|
2026-03-14 02:09:38 +08:00
|
|
|
|
if err != nil {
|
2026-03-17 00:47:17 +08:00
|
|
|
|
zap.L().Fatal("Failed to create Casbin enforcer",
|
|
|
|
|
|
zap.Error(err),
|
|
|
|
|
|
)
|
2026-03-14 02:09:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-14 18:01:55 +08:00
|
|
|
|
// 从数据库加载策略
|
2026-03-14 02:09:38 +08:00
|
|
|
|
if err := enforcer.LoadPolicy(); err != nil {
|
2026-03-17 00:47:17 +08:00
|
|
|
|
zap.L().Warn("Failed to load Casbin policy",
|
|
|
|
|
|
zap.Error(err),
|
|
|
|
|
|
)
|
2026-03-14 02:09:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-17 00:47:17 +08:00
|
|
|
|
zap.L().Info("Initialized Casbin enforcer with GORM adapter")
|
2026-03-14 02:09:38 +08:00
|
|
|
|
return enforcer
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ProvideCasbinService 提供 Casbin 服务
|
|
|
|
|
|
func ProvideCasbinService(
|
|
|
|
|
|
enforcer *casbin.Enforcer,
|
|
|
|
|
|
cache cache.Cache,
|
|
|
|
|
|
roleRepo repository.RoleRepository,
|
|
|
|
|
|
cfg *config.Config,
|
|
|
|
|
|
) service.CasbinService {
|
|
|
|
|
|
return service.NewCasbinService(enforcer, cache, roleRepo, &cfg.Casbin)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ProvideRoleRepository 提供角色仓储
|
|
|
|
|
|
func ProvideRoleRepository(db *gorm.DB) repository.RoleRepository {
|
|
|
|
|
|
return repository.NewRoleRepository(db)
|
|
|
|
|
|
}
|