feat(auth): add Casbin RBAC and user activity tracking
Integrate Casbin for role-based access control with admin routes for role management. Add user activity logging service to track login and refresh events. Refactor audit service to use AI-based content moderation.
This commit is contained in:
54
internal/wire/casbin.go
Normal file
54
internal/wire/casbin.go
Normal file
@@ -0,0 +1,54 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user