Proteções de rota

Proteções de rota permitem resguardar rotas com verificações de autenticação, autorização ou outra lógica personalizada.

Elas podem bloquear completamente a navegação ou redirecionar o usuário para outro local.


Valores retornados pela proteção

Uma função de proteção pode retornar:


Proteções globais

Proteções globais são executadas em todos os eventos de navegação, antes das proteções específicas de rota.

typescript
function registerGlobalGuard(
    guard: (
        pathname: string,
        query: Record<string, unknown>,
        data: Record<string, unknown>
    ) => boolean | string | Promise<boolean | string>
): void

Exemplo

javascript
import { registerGlobalGuard } from '@beforesemicolon/router'

// Authentication guard
registerGlobalGuard((pathname, query, state) => {
    const publicPages = ['/login', '/register', '/404']

    if (!publicPages.includes(pathname) && !userIsLoggedIn()) {
        return '/login' // Redirect to login
    }

    return true // Allow navigation
})

Proteções específicas de rota

Proteções específicas são executadas somente ao navegar para um caminho que corresponde ao padrão registrado.

typescript
function registerRouteGuard(
    pattern: string,
    guard: (
        pathname: string,
        query: Record<string, unknown>,
        data: Record<string, unknown>
    ) => boolean | string | Promise<boolean | string>
): void

Exemplo

javascript
import { registerRouteGuard } from '@beforesemicolon/router'

// Role-based authorization guard (Async)
registerRouteGuard('/admin/:section', async (pathname, query, state) => {
    try {
        const hasAccess = await checkAdminPermissions()
        return hasAccess ? true : '/unauthorized'
    } catch {
        return false // Block navigation on error
    }
})

Ordem de execução das proteções

  1. Proteções globais: executadas na ordem em que foram registradas.
  2. Proteções específicas de rota: executadas na ordem em que foram registradas.
  3. A primeira proteção que retorna false ou uma string de redirecionamento interrompe a execução imediatamente; as demais são ignoradas.
editar este documento