馃懁 Autorizaci贸n basada en roles

Next.js Roles

20 - 馃懁 Autorizaci贸n basada en roles

Aprende a controlar el acceso a ciertas secciones de tu aplicaci贸n Next.js seg煤n el rol del usuario.


馃攽 ¿Qu茅 es la autorizaci贸n basada en roles?

La autorizaci贸n basada en roles permite definir qu茅 usuarios pueden acceder a determinadas rutas o funcionalidades de la aplicaci贸n seg煤n su rol. Com煤nmente se usa junto a NextAuth.js para validar sesiones y permisos.


⚙️ Ejemplo de roles en la sesi贸n

Supongamos que guardamos el rol del usuario en la sesi贸n al iniciar sesi贸n:

{
  user: {
    name: "Juan",
    email: "juan@correo.com",
    role: "admin" // roles posibles: admin, editor, visitante
  }
}
      

馃洝️ Middleware para autorizaci贸n por roles

Podemos crear un middleware que bloquee rutas seg煤n el rol:

// middleware.js
import { getToken } from "next-auth/jwt";
import { NextResponse } from "next/server";

export async function middleware(req) {
  const token = await getToken({ req, secret: process.env.NEXTAUTH_SECRET });
  const url = req.nextUrl.clone();

  // Redirigir si no est谩 autenticado
  if (!token) {
    url.pathname = "/login";
    return NextResponse.redirect(url);
  }

  // Bloquear acceso si no es admin
  if (url.pathname.startsWith("/admin") && token.role !== "admin") {
    url.pathname = "/unauthorized";
    return NextResponse.redirect(url);
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/admin/:path*", "/dashboard/:path*"]
};
      

馃挕 Explicaci贸n:

  • Se verifica el token de la sesi贸n con getToken.
  • Si el usuario intenta acceder a /admin y no tiene rol admin, se redirige a /unauthorized.
  • El matcher define las rutas donde se aplica esta protecci贸n.

馃枼️ Protecci贸n de componentes seg煤n rol

Adem谩s, en el frontend podemos condicionar la renderizaci贸n:

import { useSession } from "next-auth/react";

export default function AdminPanel() {
  const { data: session } = useSession();

  if (!session) return <p>Cargando...</p>;

  if (session.user.role !== "admin") return <p>No tienes permisos para acceder.</p>;

  return (
    <div>
      <h1>Panel de Administraci贸n</h1>
      <p>Bienvenido, {session.user.name}</p>
    </div>
  );
}
      
馃挕 Combinando Middleware y validaciones en componentes, aseguramos que s贸lo usuarios con el rol correcto puedan acceder.

✅ Resumen

  • 馃懁 La autorizaci贸n por roles controla el acceso a rutas y funcionalidades seg煤n el rol del usuario.
  • 馃洝️ Middleware + Frontend garantiza seguridad completa.
  • ⚡ Roles comunes: admin, editor, visitante.
  • 馃敆 Siempre redirige o muestra mensaje de acceso denegado a quienes no cumplan los permisos.

Publicar un comentario

0 Comentarios