백엔드 관리 시스템의 경우 액세스 제어 및 개인화된 사용자 인터페이스와 같은 기능이 필수적입니다. 예를 들어 최고 관리자는 모든 페이지를 볼 수 있고, 일반 사용자는 페이지 A와 B에 액세스할 수 있으며, VIP 사용자는 페이지 A, B, C, D를 볼 수 있습니다. 이러한 기능의 논리는 다음 세 가지 주요 개념의 설계를 기반으로 합니다.
다음 다이어그램으로 관계를 설명할 수 있습니다.
다음으로 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개의 테이블이 있습니다.
도메인 모델은 다음과 같이 시각화할 수 있습니다.
다음으로 Nest에서 비관계 테이블 3개를 생성하고 관계를 정의하겠습니다.
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입니다. 일치하는 역할 기록은 자동으로 사용자에게 연결됩니다.
nest new nest-project
역할 테이블의 권한 필드도 비슷하게 작동합니다. 이는 role.id === rolePermissionRelation.roleId 및Permission.id === rolePermissionRelation.permissionId 로직을 사용하여 role_permission_relation 테이블과 연결됩니다.
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 서비스를 실행하면 데이터가 데이터베이스에 채워집니다.
기본 권한 구조가 설정되면 이제 등록, 로그인, JWT 기반 인증과 같은 기능을 구현할 수 있습니다.
이제 당신 차례입니다!
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
무제한 프로젝트를 무료로 배포
탁월한 비용 효율성
간소화된 개발자 경험
손쉬운 확장성과 고성능
문서에서 더 자세히 알아보세요!
X에서 우리를 팔로우하세요: @LeapcellHQ
저희 블로그에서 읽어보세요
위 내용은 Nest.js를 사용한 RBAC 권한 시스템 설계: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!