> 웹 프론트엔드 > JS 튜토리얼 > Nest.js를 사용한 RBAC 권한 시스템 설계: 단계별 가이드

Nest.js를 사용한 RBAC 권한 시스템 설계: 단계별 가이드

Barbara Streisand
풀어 주다: 2025-01-05 18:48:41
원래의
699명이 탐색했습니다.

Designing RBAC Permission System with Nest.js: A Step-by-Step Guide

머리말

백엔드 관리 시스템의 경우 액세스 제어 및 개인화된 사용자 인터페이스와 같은 기능이 필수적입니다. 예를 들어 최고 관리자는 모든 페이지를 볼 수 있고, 일반 사용자는 페이지 A와 B에 액세스할 수 있으며, VIP 사용자는 페이지 A, B, C, D를 볼 수 있습니다. 이러한 기능의 논리는 다음 세 가지 주요 개념의 설계를 기반으로 합니다.

  • 사용자: 앨리스, 밥, 찰리 등의 기본 단위
  • 역할: 사용자는 하나 이상의 역할을 가질 수 있습니다. 예를 들어 Alice는 일반 사용자 역할과 VIP 역할을 모두 가질 수 있습니다.
  • 권한: 역할은 여러 권한과 연결됩니다. 예를 들어 VIP 역할에는 보기, 편집, 추가 권한이 있고 최고 관리자에게는 보기, 편집, 추가 및 삭제 권한이 있을 수 있습니다.

다음 다이어그램으로 관계를 설명할 수 있습니다.

Designing RBAC Permission System with Nest.js: A Step-by-Step Guide

다음으로 Nest를 사용하여 이러한 시스템의 기반인 권한 설계를 처음부터 구현하겠습니다.

데이터베이스 생성

먼저 데이터베이스를 만들어야 합니다. MySQL 데이터베이스를 사용하고 다음 명령을 실행하여 생성합니다.

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
로그인 후 복사
로그인 후 복사

프로젝트 초기화

다음 명령을 실행하여 새 Nest 프로젝트를 시작합니다.

nest new nest-project
로그인 후 복사
로그인 후 복사

그런 다음 필요한 데이터베이스 종속성(주로 typeorm 및 mysql2)을 설치합니다.

npm install --save @nestjs/typeorm typeorm mysql2
로그인 후 복사
로그인 후 복사

다음으로 app.module.ts에서 typeorm을 구성합니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'password',
      database: 'nest-database',
      synchronize: true,
      logging: true,
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      poolSize: 10,
      connectorPackage: 'mysql2',
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
로그인 후 복사
로그인 후 복사

테이블 디자인

일반적으로 RBAC(역할 기반 액세스 제어) 시스템에는 다음과 같이 5개의 테이블이 있습니다.

  • 사용자 테이블(user): 사용자 이름, 비밀번호, 이메일과 같은 기본 사용자 정보를 저장합니다.
  • 역할 테이블(role): 역할 이름, 역할 코드 등 역할 세부정보를 저장합니다.
  • 권한 테이블(권한): 권한 이름, 권한 코드 등 권한 세부정보를 저장합니다.
  • 사용자-역할 관계 테이블 (user_role_relation): 사용자와 역할 간의 관계를 추적합니다.
  • 역할-권한 관계 테이블(role_permission_relation): 역할과 권한 간의 관계를 추적합니다.

도메인 모델은 다음과 같이 시각화할 수 있습니다.

Designing RBAC Permission System with Nest.js: A Step-by-Step Guide

다음으로 Nest에서 비관계 테이블 3개를 생성하고 관계를 정의하겠습니다.

user.entity.ts:

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
로그인 후 복사
로그인 후 복사

User 테이블에는 user_role_relation 테이블과 연결하기 위한 role 필드가 정의되어 있습니다. 관계 논리는 user.id === userRoleRelation.userId 및 role.id === userRoleRelation.roleId입니다. 일치하는 역할 기록은 자동으로 사용자에게 연결됩니다.

role.entity.ts:

nest new nest-project
로그인 후 복사
로그인 후 복사

역할 테이블의 권한 필드도 비슷하게 작동합니다. 이는 role.id === rolePermissionRelation.roleId 및Permission.id === rolePermissionRelation.permissionId 로직을 사용하여 role_permission_relation 테이블과 연결됩니다.

허가.엔티티.ts:

npm install --save @nestjs/typeorm typeorm mysql2
로그인 후 복사
로그인 후 복사

권한 테이블에는 관계가 없습니다. 단순히 사용 가능한 권한을 기록합니다.

데이터 초기화

일부 테스트 데이터를 초기화하는 서비스는 다음과 같습니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'password',
      database: 'nest-database',
      synchronize: true,
      logging: true,
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      poolSize: 10,
      connectorPackage: 'mysql2',
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
로그인 후 복사
로그인 후 복사

브라우저나 Postman을 통해 initData 서비스를 실행하면 데이터가 데이터베이스에 채워집니다.

Designing RBAC Permission System with Nest.js: A Step-by-Step Guide


기본 권한 구조가 설정되면 이제 등록, 로그인, JWT 기반 인증과 같은 기능을 구현할 수 있습니다.

이제 당신 차례입니다!


우리는 NestJS 프로젝트를 클라우드에 배포하기 위한 최고의 선택인 Leapcell입니다.

Designing RBAC Permission System with Nest.js: A Step-by-Step Guide

Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.

다국어 지원

  • JavaScript, Python, Go 또는 Rust를 사용하여 개발하세요.

무제한 프로젝트를 무료로 배포

  • 사용한 만큼만 지불하세요. 요청이나 요금이 부과되지 않습니다.

탁월한 비용 효율성

  • 유휴 비용 없이 사용한 만큼만 지불하세요.
  • 예: $25는 평균 응답 시간 60ms에서 694만 개의 요청을 지원합니다.

간소화된 개발자 경험

  • 손쉬운 설정을 위한 직관적인 UI.
  • 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
  • 실행 가능한 통찰력을 위한 실시간 측정항목 및 로깅.

손쉬운 확장성과 고성능

  • 자동 확장을 통해 높은 동시성을 쉽게 처리할 수 있습니다.
  • 운영 오버헤드가 전혀 없습니다. 구축에만 집중하세요.

문서에서 더 자세히 알아보세요!

X에서 우리를 팔로우하세요: @LeapcellHQ


저희 블로그에서 읽어보세요

위 내용은 Nest.js를 사용한 RBAC 권한 시스템 설계: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿