Heim >Web-Frontend >js-Tutorial >Entwerfen eines RBAC-Berechtigungssystems mit Nest.js: Eine Schritt-für-Schritt-Anleitung
Für Backend-Managementsysteme sind Funktionen wie Zugriffskontrolle und personalisierte Benutzeroberflächen unerlässlich. Beispielsweise kann ein Superadministrator alle Seiten anzeigen, normale Benutzer können auf die Seiten A und B zugreifen und VIP-Benutzer können die Seiten A, B, C und D anzeigen. Die Logik hinter diesen Funktionen basiert auf dem Design von drei Schlüsselkonzepten:
Der Zusammenhang kann mit dem folgenden Diagramm veranschaulicht werden:
Als nächstes werden wir Nest verwenden, um die Grundlage eines solchen Systems von Grund auf zu implementieren – das Berechtigungsdesign.
Zuerst müssen wir die Datenbank erstellen. Wir verwenden die MySQL-Datenbank und führen den folgenden Befehl aus, um sie zu erstellen:
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Wir starten ein neues Nest-Projekt, indem wir den folgenden Befehl ausführen:
nest new nest-project
Dann installieren Sie die erforderlichen Datenbankabhängigkeiten, hauptsächlich typeorm und mysql2:
npm install --save @nestjs/typeorm typeorm mysql2
Als nächstes konfigurieren Sie typeorm in app.module.ts:
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 {}
Typischerweise verfügt ein RBAC-System (Role-Based Access Control) über 5 Tabellen wie folgt:
Das Domänenmodell kann wie folgt visualisiert werden:
Als nächstes erstellen wir drei Nicht-Beziehungstabellen in Nest und definieren ihre Beziehungen.
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
In der Benutzertabelle ist das Rollenfeld so definiert, dass es mit der Tabelle user_role_relation verbunden wird. Die Beziehungslogik lautet: user.id === userRoleRelation.userId und role.id === userRoleRelation.roleId. Übereinstimmende Rollendatensätze werden automatisch mit dem Benutzer verknüpft.
nest new nest-project
Das Berechtigungsfeld in der Rollentabelle funktioniert ähnlich. Es stellt eine Verbindung mit der Tabelle „role_permission_relation“ mithilfe der Logik her: „role.id === RolePermissionRelation.roleId“ und „permission.id === RolePermissionRelation.permissionId“.
npm install --save @nestjs/typeorm typeorm mysql2
Die Berechtigungstabelle hat keine Beziehungen; Es zeichnet einfach die verfügbaren Berechtigungen auf.
Hier ist ein Dienst zum Initialisieren einiger Testdaten:
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 {}
Führen Sie den initData-Dienst über einen Browser oder Postman aus, und die Daten werden in die Datenbank eingetragen.
Nachdem die grundlegende Berechtigungsstruktur eingerichtet ist, können Sie jetzt Funktionen wie Registrierung, Anmeldung und JWT-basierte Authentifizierung implementieren.
Jetzt bist du dran!
Leapcell ist die serverlose Plattform der nächsten Generation für Webhosting, Async-Aufgaben und Redis:
Mehrsprachige Unterstützung
Stellen Sie unbegrenzt viele Projekte kostenlos bereit
Unschlagbare Kosteneffizienz
Optimierte Entwicklererfahrung
Mühelose Skalierbarkeit und hohe Leistung
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ
Lesen Sie auf unserem Blog
Das obige ist der detaillierte Inhalt vonEntwerfen eines RBAC-Berechtigungssystems mit Nest.js: Eine Schritt-für-Schritt-Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!