«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как добавить авторизацию RBAC в Next.js

Как добавить авторизацию RBAC в Next.js

Опубликовано 4 ноября 2024 г.
Просматривать:314

How to Add RBAC Authorization in Next.js

Управление доступом на основе ролей (RBAC) — это важнейшая функция современных веб-приложений, позволяющая администраторам управлять разрешениями пользователей в зависимости от их ролей в системе. Реализация RBAC в приложении Next.js включает в себя несколько ключевых шагов: определение ролей и разрешений, их интеграция с аутентификацией и обеспечение контроля доступа в вашем приложении. Это руководство проведет вас через процесс добавления авторизации RBAC в приложение Next.js.


1. Понимание RBAC

Управление доступом на основе ролей (RBAC) — это метод ограничения доступа к системе авторизованным пользователям на основе их ролей. Роли определяют набор разрешений, а пользователям назначаются роли, которые предоставляют им соответствующие разрешения. Например, в приложении у вас могут быть такие роли, как администратор, редактор и просмотрщик, каждая из которых имеет разные уровни доступа.

2. Настройка проекта Next.js

Если вы еще этого не сделали, начните с создания проекта Next.js:

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

3. Добавление аутентификации

Перед внедрением RBAC вам необходим механизм аутентификации для идентификации пользователей. Next.js не имеет встроенной аутентификации, поэтому вы можете использовать такие библиотеки, как NextAuth.js или Firebase Authentication. Вот краткий обзор настройки NextAuth.js:

  1. Установить NextAuth.js:
   npm install next-auth
  1. Создать маршрут API для аутентификации:

В каталоге страниц/api создайте файл с именем [...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. Добавить страницу входа:

Создайте простую страницу входа на страницеpages/auth/signin.js:

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

   export default function SignIn() {
     return (
       

Sign In

); }

4. Определение ролей и разрешений

Определите роли и разрешения в своем приложении. Вы можете сделать это в центральном файле конфигурации или непосредственно в своем коде. Вот простой пример определения ролей и разрешений:

// 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. Реализация RBAC

Интегрируйте логику RBAC в свои страницы Next.js и маршруты API. Вот как можно ограничить доступ на основе ролей:

  1. Защита страниц:

Создайте компонент высшего порядка (HOC) для переноса защищенных страниц:

   // 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 ; }; }

Используйте этот HOC на своих страницах:

   // 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. Защита маршрутов API:

Вы также можете защитить маршруты API, проверив роли пользователей:

   // 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. Тестирование и доработка

Обязательно протестируйте реализацию RBAC, чтобы убедиться, что разрешения и роли применяются правильно. Проверьте разные роли, чтобы убедиться, что ограничения доступа работают должным образом.

Заключение

Интеграция управления доступом на основе ролей (RBAC) в приложение Next.js включает настройку аутентификации, определение ролей и разрешений, а также применение этих ролей во всем приложении. Следуя шагам, описанным в этом руководстве, вы сможете эффективно управлять доступом пользователей и гарантировать, что ваше приложение Next.js является безопасным и удобным для пользователя.
КАМЕРА С SIM-КАРТОЙ 4G

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/saman_sardari_22e7e9081be/how-to-add-rbac-authorization-in-nextjs-3ll6?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3