package wire import ( "context" "with_you/internal/middleware" "with_you/internal/model" "with_you/internal/repository" "with_you/internal/service" ) // ProvideIdentityProvider 提供认证管道依赖的 IdentityProvider 实现。 // // 把 UserService + CasbinService + SessionRepository 组合为中间件所需的查询接口, // 避免中间件直接依赖具体 service 三个包,便于测试以 fake 注入。 func ProvideIdentityProvider( userService service.UserService, casbinService service.CasbinService, sessionRepo repository.SessionRepository, ) middleware.IdentityProvider { return &identityProviderImpl{ userService: userService, casbinService: casbinService, sessionRepo: sessionRepo, } } type identityProviderImpl struct { userService service.UserService casbinService service.CasbinService sessionRepo repository.SessionRepository } func (i *identityProviderImpl) GetUserByID(ctx context.Context, userID string) (*model.User, error) { return i.userService.GetUserByID(ctx, userID) } func (i *identityProviderImpl) GetRolesForUser(ctx context.Context, userID string) ([]string, error) { roles, err := i.casbinService.GetRolesForUser(ctx, userID) if err != nil { return nil, err } if roles == nil { roles = []string{} } return roles, nil } func (i *identityProviderImpl) GetSessionByID(ctx context.Context, sessionID string) (*model.Session, error) { if sessionID == "" { return nil, nil } return i.sessionRepo.GetByID(ctx, sessionID) }