"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo agregar autorización RBAC en Next.js

Cómo agregar autorización RBAC en Next.js

Publicado el 2024-11-04
Navegar:327

How to Add RBAC Authorization in Next.js

El control de acceso basado en roles (RBAC) es una característica crucial en las aplicaciones web modernas, que permite a los administradores administrar los permisos de los usuarios según sus roles dentro del sistema. La implementación de RBAC en una aplicación Next.js implica algunos pasos clave: definir roles y permisos, integrarlos con la autenticación y aplicar el control de acceso en su aplicación. Esta guía lo guiará a través del proceso de agregar autorización RBAC a una aplicación Next.js.


1. Comprensión del RBAC

El control de acceso basado en roles (RBAC) es un método para restringir el acceso al sistema a usuarios autorizados según sus roles. Los roles definen un conjunto de permisos y a los usuarios se les asignan roles que les otorgan los permisos asociados. Por ejemplo, en una aplicación, es posible que tengas roles como administrador, editor y espectador, cada uno con diferentes niveles de acceso.

2. Configurando su proyecto Next.js

Si aún no lo has hecho, comienza creando un proyecto Next.js:

npx create-next-app@latest my-rbac-app
cd my-rbac-app

3. Agregar autenticación

Antes de implementar RBAC, necesita un mecanismo de autenticación para identificar a los usuarios. Next.js no viene con autenticación incorporada, por lo que puede usar bibliotecas como NextAuth.js o Firebase Authentication. A continuación se ofrece una breve descripción general de la configuración de NextAuth.js:

  1. Instalar NextAuth.js:
   npm install next-auth
  1. Crear ruta API para autenticación:

En su directorio páginas/api, cree un archivo llamado [...nextauth].js:

   // pages/api/auth/[...nextauth].js
   import NextAuth from 'next-auth';
   import CredentialsProvider from 'next-auth/providers/credentials';

   export default NextAuth({
     providers: [
       CredentialsProvider({
         async authorize(credentials) {
           // Here you should fetch and verify user credentials from your database
           const user = { id: 1, name: 'John Doe', email: '[email protected]', role: 'admin' };
           if (user) {
             return user;
           } else {
             return null;
           }
         }
       })
     ],
     pages: {
       signIn: '/auth/signin',
     },
     callbacks: {
       async session({ session, token }) {
         session.user.role = token.role;
         return session;
       },
       async jwt({ token, user }) {
         if (user) {
           token.role = user.role;
         }
         return token;
       }
     }
   });
  1. Agregar página de inicio de sesión:

Cree una página de inicio de sesión sencilla en páginas/auth/signin.js:

   // pages/auth/signin.js
   import { signIn } from 'next-auth/react';

   export default function SignIn() {
     return (
       

Sign In

); }

4. Definición de roles y permisos

Defina roles y permisos en su aplicación. Puede hacer esto en un archivo de configuración central o directamente dentro de su código. A continuación se muestra un ejemplo sencillo de cómo definir roles y permisos:

// lib/roles.js
export const ROLES = {
  ADMIN: 'admin',
  EDITOR: 'editor',
  VIEWER: 'viewer',
};

export const PERMISSIONS = {
  [ROLES.ADMIN]: ['view_dashboard', 'edit_content', 'delete_content'],
  [ROLES.EDITOR]: ['view_dashboard', 'edit_content'],
  [ROLES.VIEWER]: ['view_dashboard'],
};

5. Implementación de RBAC

Integre la lógica RBAC en sus páginas Next.js y rutas API. A continuación se explica cómo restringir el acceso según los roles:

  1. Protección de páginas:

Cree un componente de orden superior (HOC) para envolver sus páginas protegidas:

   // lib/withAuth.js
   import { useSession, signIn } from 'next-auth/react';
   import { ROLES } from './roles';

   export function withAuth(Component, allowedRoles) {
     return function ProtectedPage(props) {
       const { data: session, status } = useSession();

       if (status === 'loading') return 

Loading...

; if (!session || !allowedRoles.includes(session.user.role)) { signIn(); return null; } return ; }; }

Utiliza este HOC en tus páginas:

   // pages/admin.js
   import { withAuth } from '../lib/withAuth';
   import { ROLES } from '../lib/roles';

   function AdminPage() {
     return 
Welcome, Admin!
; } export default withAuth(AdminPage, [ROLES.ADMIN]);
  1. Protección de rutas API:

También puedes proteger las rutas API comprobando los roles de usuario:

   // pages/api/protected-route.js
   import { getSession } from 'next-auth/react';
   import { ROLES } from '../../lib/roles';

   export default async function handler(req, res) {
     const session = await getSession({ req });

     if (!session || !ROLES.ADMIN.includes(session.user.role)) {
       return res.status(403).json({ message: 'Forbidden' });
     }

     res.status(200).json({ message: 'Success' });
   }

6. Pruebas y refinamiento

Asegúrese de probar exhaustivamente su implementación de RBAC para verificar que los permisos y roles se apliquen correctamente. Pruebe diferentes roles para confirmar que las restricciones de acceso funcionan según lo esperado.

Conclusión

Integrar el control de acceso basado en roles (RBAC) en una aplicación Next.js implica configurar la autenticación, definir roles y permisos, y hacer cumplir estos roles en toda su aplicación. Si sigue los pasos descritos en esta guía, podrá administrar eficazmente el acceso de los usuarios y asegurarse de que su aplicación Next.js sea segura y fácil de usar.
CÁMARA CARRO SIM 4G

Declaración de liberación Este artículo se reproduce en: https://dev.to/saman_sardari_22e7e9081be/how-to-add-rbac-authorization-in-nextjs-3ll6?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3