"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como adicionar autorização RBAC em Next.js

Como adicionar autorização RBAC em Next.js

Publicado em 2024-11-04
Navegar:661

How to Add RBAC Authorization in Next.js

Role-Based Access Control (RBAC) é um recurso crucial em aplicativos da web modernos, permitindo que os administradores gerenciem as permissões do usuário com base em suas funções no sistema. A implementação do RBAC em um aplicativo Next.js envolve algumas etapas principais: definir funções e permissões, integrá-las à autenticação e impor o controle de acesso em seu aplicativo. Este guia orientará você no processo de adição de autorização RBAC a um aplicativo Next.js.


1. Compreendendo o RBAC

Role-Based Access Control (RBAC) é um método para restringir o acesso do sistema a usuários autorizados com base em suas funções. As funções definem um conjunto de permissões e os usuários recebem funções que lhes concedem as permissões associadas. Por exemplo, em um aplicativo, você pode ter funções como administrador, editor e visualizador, cada uma com diferentes níveis de acesso.

2. Configurando seu projeto Next.js

Se ainda não o fez, comece criando um projeto Next.js:

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

3. Adicionando autenticação

Antes de implementar o RBAC, você precisa de um mecanismo de autenticação para identificar os usuários. Next.js não vem com autenticação integrada, então você pode usar bibliotecas como NextAuth.js ou Firebase Authentication. Aqui está uma breve visão geral da configuração do NextAuth.js:

  1. Instale NextAuth.js:
   npm install next-auth
  1. Criar rota de API para autenticação:

Em seu diretório pages/api, crie um arquivo chamado [...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. Adicionar página de login:

Crie uma página de login simples em pages/auth/signin.js:

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

   export default function SignIn() {
     return (
       

Sign In

); }

4. Definindo funções e permissões

Defina funções e permissões em seu aplicativo. Você pode fazer isso em um arquivo de configuração central ou diretamente no seu código. Aqui está um exemplo simples de definição de funções e permissões:

// 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. Implementando RBAC

Integre a lógica RBAC em suas páginas Next.js e rotas de API. Veja como restringir o acesso com base em funções:

  1. Protegendo páginas:

Crie um componente de ordem superior (HOC) para agrupar suas 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 ; }; }

Use este HOC em suas 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. Protegendo rotas de API:

Você também pode proteger rotas de API verificando as funções do usuário:

   // 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. Teste e Refinamento

Certifique-se de testar minuciosamente sua implementação de RBAC para verificar se as permissões e funções são aplicadas corretamente. Teste diferentes funções para confirmar se as restrições de acesso estão funcionando conforme o esperado.

Conclusão

Integrar o controle de acesso baseado em função (RBAC) em um aplicativo Next.js envolve configurar autenticação, definir funções e permissões e aplicar essas funções em todo o seu aplicativo. Seguindo as etapas descritas neste guia, você pode gerenciar com eficácia o acesso do usuário e garantir que seu aplicativo Next.js seja seguro e fácil de usar.
CÂMERA DE CARRINHO SIM 4G

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/saman_sardari_22e7e9081be/how-to-add-rbac-authorization-in-nextjs-3ll6?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3