برنامه نویسی

کنترل دسترسی مبتنی بر نقش پیشرفته (RBAC) در Nestjs با یک نگهبان مجوز سفارشی

اجرای کنترل دسترسی مبتنی بر نقش در برنامه Nestjs شما؟ در اینجا یک راه حل تمیز و مقیاس پذیر با استفاده از یک محافظ مجوز سفارشی وجود دارد که:
✅ از مسیرهای public () پشتیبانی می کند
✅ مجوزها را از طریق دکوراتور PERMISSION () بررسی می کند
✅ به Super_admin اجازه می دهد تا همه چک ها را دور بزند
✅ از دسترسی Wildcard مانند کاربر پشتیبانی می کند:*
🔐 مثال:

@Permission('user:create')
@Post('create')
createUser() { ... }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در کنترل کننده ها چک های کثیف دیگری وجود ندارد! این نگهبان همه چیز را به طور مرتب و کارآمد در سطح مسیر انجام می دهد.

code کد نگهبان مجوز

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { IS_PUBLIC_KEY } from 'src/decorators/public.decorator';
import { PERMISSION_KEY } from 'src/decorators/Permission.decorator';
import { JwtPayload } from 'jsonwebtoken';
import { AdministratorRoleEnum } from '@prisma/client';

@Injectable()
export class PermissionGuard implements CanActivate {
  constructor(private reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const isPublic = this.reflector.get(
      IS_PUBLIC_KEY,
      context.getHandler(),
    );
    if (isPublic) return true;

    const requiredRules = this.reflector.get(
      PERMISSION_KEY,
      context.getHandler(),
    );
    if (!requiredRules || requiredRules.length === 0) return true;

    const request = context.switchToHttp().getRequest();
    const user = request.user as JwtPayload;

    if (!user) return false;

    if (user.role === AdministratorRoleEnum.super_admin) return true;

    if (!Array.isArray(user.rules)) return false;

    return requiredRules.every((requiredRule) => {
      if (user.rules.includes(requiredRule)) return true;
      const resource = requiredRule.split(':')?.[0];
      return user.rules.includes(`${resource}:*`);
    });
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ایده آل برای پانل های سرپرست ، داشبورد یا هر برنامه ای با چندین نقش کاربر. 💼

👉 RBAC تمیز ، مقیاس پذیر و آماده تولید در Nestjs.

برای مطالعه بیشتر اینجا را کلیک کنید

با احترام ،
NI Rimon

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا