Middlewares Disponíveis
Todos os middlewares do kernel que você pode usar nas rotas do seu módulo.
Middlewares de autenticação
| Middleware | Descrição | Uso típico |
|---|---|---|
AuthHybridMiddleware | Aceita cookie ou Bearer token. Popula $request->attribute('auth_user') | Rotas protegidas para usuários logados |
AdminOnlyMiddleware | Exige nível admin_system | Rotas administrativas |
OptionalAuthHybridMiddleware | Autentica se token presente, mas não bloqueia | Rotas públicas com comportamento diferente para logados |
ApiTokenMiddleware | Valida token de API (X-API-KEY) | Integrações machine-to-machine |
Middlewares de proteção
| Middleware | Parâmetros | Descrição |
|---|---|---|
RateLimitMiddleware | limit, window, key | Limita requisições por janela de tempo |
CircuitBreakerMiddleware | service, threshold, cooldown | Abre o circuito após N falhas consecutivas |
BotBlockerMiddleware | — | Bloqueia bots e scrapers |
HttpsEnforcerMiddleware | — | Redireciona HTTP para HTTPS |
Exemplos de uso nas rotas
<?php
use Src\Kernel\Middlewares\AuthHybridMiddleware;
use Src\Kernel\Middlewares\AdminOnlyMiddleware;
use Src\Kernel\Middlewares\RateLimitMiddleware;
use Src\Kernel\Middlewares\CircuitBreakerMiddleware;
/** @var \Src\Kernel\Contracts\RouterInterface $router */
// Apenas autenticado
$auth = [AuthHybridMiddleware::class];
// Apenas admin
$admin = [AuthHybridMiddleware::class, AdminOnlyMiddleware::class];
// Com rate limit: 30 req/min
$rateLimit = [RateLimitMiddleware::class, ['limit' => 30, 'window' => 60, 'key' => 'produto']];
// Com circuit breaker
$circuit = [CircuitBreakerMiddleware::class, ['service' => 'database', 'threshold' => 5, 'cooldown' => 30]];
// Combinando múltiplos middlewares
$router->post('/api/produto', [ProdutoController::class, 'criar'], [
AuthHybridMiddleware::class,
[RateLimitMiddleware::class, ['limit' => 10, 'window' => 60, 'key' => 'produto.criar']],
[CircuitBreakerMiddleware::class, ['service' => 'database', 'threshold' => 3, 'cooldown' => 20]],
]);
Acessando o usuário autenticado no controller
public function criar(Request $request): Response
{
// Obtém o usuário logado (injetado pelo AuthHybridMiddleware)
$user = $request->attribute('auth_user');
$userId = $user->getUuid()->toString();
$username = $user->getUsername();
$nivel = $user->getNivelAcesso(); // 'admin_system' | 'usuario'
// Usa o userId para associar o recurso ao usuário
$item = $this->service->criar($request->body, $userId);
return Response::json(['produto' => $item], 201);
}
Middleware próprio do módulo
Você pode criar middlewares específicos para o seu módulo implementando MiddlewareInterface:
use Src\Kernel\Contracts\MiddlewareInterface;
use Src\Kernel\Http\Request\Request;
use Src\Kernel\Http\Response\Response;
final class ApiKeyMiddleware implements MiddlewareInterface
{
public function handle(Request $request, callable $next): Response
{
$key = $request->header('X-Api-Key');
if ($key !== 'minha-chave-secreta') {
return Response::json(['error' => 'API Key inválida.'], 401);
}
return $next($request);
}
}