UNPKG

sysrot-hub

Version:

CLI de nueva generación para proyectos Next.js 14+ con IA multi-modelo, Web3 integration, internacionalización completa y roadmap realista 2025-2026

61 lines (49 loc) 1.82 kB
import { NextResponse } from "next/server"; import { NextRequest } from "next/server"; import { getToken } from "next-auth/jwt"; import { UserRole } from "@/lib/roles"; // Rutas que no requieren autenticación const publicRoutes = ["/", "/login", "/register", "/api/auth"]; // Rutas que requieren rol de administrador const adminRoutes = ["/admin"]; // Función para verificar si una ruta es pública const isPublicRoute = (path: string) => { return publicRoutes.some((route) => path === route || path.startsWith(`${route}/`)); }; // Función para verificar si una ruta es de administrador const isAdminRoute = (path: string) => { return adminRoutes.some((route) => path === route || path.startsWith(`${route}/`)); }; export async function middleware(request: NextRequest) { const { pathname } = request.nextUrl; // Verificar si es una ruta pública if (isPublicRoute(pathname)) { return NextResponse.next(); } // Verificar token de autenticación const token = await getToken({ req: request }); // Si no hay token, redirigir al login if (!token) { const url = new URL("/login", request.url); url.searchParams.set("callbackUrl", encodeURI(pathname)); return NextResponse.redirect(url); } // Verificar permisos para rutas de administrador if (isAdminRoute(pathname)) { const userRole = token.role as UserRole; if (userRole !== "admin") { // Si no es admin, redirigir a la página principal return NextResponse.redirect(new URL("/", request.url)); } } return NextResponse.next(); } export const config = { matcher: [ // Rutas que requieren autenticación "/dashboard/:path*", "/profile/:path*", "/admin/:path*", "/api/((?!auth).)*", ], };