- Add admin handlers and services for users, posts, comments, groups, and dashboard - Implement role permission management with ability to view and update permissions - Add database seeding for roles and Casbin permission policies - Upgrade Casbin from v2 to v3 with GORM adapter for persistent policy storage - Add admin-specific repository methods with filtering and pagination - Register new admin API routes under /api/v1/admin/*
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
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)
|
||
}
|