package wire import ( "log" "carrot_bbs/internal/cache" "carrot_bbs/internal/config" "carrot_bbs/internal/repository" "carrot_bbs/internal/service" "github.com/casbin/casbin/v3" gormadapter "github.com/casbin/gorm-adapter/v3" "github.com/google/wire" "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 { // 创建 GORM 适配器,连接数据库 adapter, err := gormadapter.NewAdapterByDB(db) if err != nil { log.Fatalf("Failed to create Casbin GORM adapter: %v", err) } // 创建 Casbin Enforcer,使用数据库适配器 enforcer, err := casbin.NewEnforcer(cfg.Casbin.ModelPath, adapter) if err != nil { log.Fatalf("Failed to create Casbin enforcer: %v", err) } // 从数据库加载策略 if err := enforcer.LoadPolicy(); err != nil { log.Printf("[WARNING] Failed to load Casbin policy: %v", err) } log.Println("[Wire] Initialized Casbin enforcer with GORM adapter") 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) }