package wire import ( "log" "carrot_bbs/internal/cache" "carrot_bbs/internal/config" "carrot_bbs/internal/repository" "carrot_bbs/internal/service" "github.com/casbin/casbin/v2" "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 { // 创建 Casbin Enforcer // 注意:这里使用文件适配器作为示例,实际使用时需要替换为数据库适配器 enforcer, err := casbin.NewEnforcer(cfg.Casbin.ModelPath) 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") 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) }