Referência v3
Voltar à plataforma

Middlewares Disponíveis

Todos os middlewares do kernel que você pode usar nas rotas do seu módulo.

Middlewares de autenticação

MiddlewareDescriçãoUso típico
AuthHybridMiddlewareAceita cookie ou Bearer token. Popula $request->attribute('auth_user')Rotas protegidas para usuários logados
AdminOnlyMiddlewareExige nível admin_systemRotas administrativas
OptionalAuthHybridMiddlewareAutentica se token presente, mas não bloqueiaRotas públicas com comportamento diferente para logados
ApiTokenMiddlewareValida token de API (X-API-KEY)Integrações machine-to-machine

Middlewares de proteção

MiddlewareParâmetrosDescrição
RateLimitMiddlewarelimit, window, keyLimita requisições por janela de tempo
CircuitBreakerMiddlewareservice, threshold, cooldownAbre o circuito após N falhas consecutivas
BotBlockerMiddlewareBloqueia bots e scrapers
HttpsEnforcerMiddlewareRedireciona 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);
    }
}