Referência v3
Voltar à plataforma

Rotas e Proteção

Como definir rotas públicas e protegidas no seu módulo.

Arquivo de rotas

As rotas são definidas em Routes/web.php. O framework injeta a variável $router automaticamente:

<?php

use Src\Modules\Task\Controllers\TaskController;
use Src\Kernel\Middlewares\AuthHybridMiddleware;
use Src\Kernel\Middlewares\AdminOnlyMiddleware;

/** @var \Src\Kernel\Contracts\RouterInterface $router */

// Middlewares reutilizáveis
$auth  = [AuthHybridMiddleware::class];
$admin = [AuthHybridMiddleware::class, AdminOnlyMiddleware::class];

// Rotas de leitura (autenticado)
$router->get('/api/task',      [TaskController::class, 'listar'],    $auth);
$router->get('/api/task/{id}', [TaskController::class, 'buscar'],    $auth);

// Rotas de escrita (autenticado)
$router->post('/api/task',      [TaskController::class, 'criar'],     $auth);
$router->put('/api/task/{id}',  [TaskController::class, 'atualizar'], $auth);

// Rota de exclusão (apenas admin)
$router->delete('/api/task/{id}', [TaskController::class, 'deletar'], $admin);

Tipos de proteção

MiddlewareQuem acessaUso
AuthHybridMiddlewareQualquer usuário autenticadoRotas de leitura e escrita
AdminOnlyMiddlewareApenas admin_systemRotas administrativas
RateLimitMiddlewareTodos (com limite)Proteção contra abuso
Sem middlewareQualquer pessoaRotas públicas (cuidado!)
Rotas de escrita sem proteção

O analisador de código da IDE detecta rotas POST/PUT/DELETE sem middleware e emite um aviso. Sempre proteja rotas que modificam dados.

Middleware próprio do módulo

Você pode criar middlewares específicos para o seu módulo em Middlewares/:

<?php

namespace Src\Modules\Task\Middlewares;

use Src\Kernel\Contracts\MiddlewareInterface;
use Src\Kernel\Http\Request\Request;
use Src\Kernel\Http\Response\Response;

final class TaskMiddleware implements MiddlewareInterface
{
    public function handle(Request $request, callable $next): Response
    {
        // Lógica antes da requisição
        $response = $next($request);
        // Lógica depois da requisição
        return $response;
    }
}