Untuk sistem pengurusan bahagian belakang, ciri seperti kawalan akses dan antara muka pengguna diperibadikan adalah penting. Sebagai contoh, pentadbir super boleh melihat semua halaman, pengguna biasa boleh mengakses halaman A dan B, dan pengguna VIP boleh melihat halaman A, B, C dan D. Logik di sebalik fungsi ini adalah berdasarkan reka bentuk tiga konsep utama:
Hubungan boleh digambarkan dengan rajah berikut:
Seterusnya, kami akan menggunakan Nest untuk melaksanakan asas sistem sedemikian dari awal — reka bentuk kebenaran.
Pertama, kita perlu mencipta pangkalan data. Kami akan menggunakan pangkalan data MySQL dan melaksanakan arahan berikut untuk menciptanya:
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Kami akan memulakan projek Nest baharu dengan menjalankan arahan berikut:
nest new nest-project
Kemudian, pasangkan kebergantungan pangkalan data yang diperlukan, terutamanya typeorm dan mysql2:
npm install --save @nestjs/typeorm typeorm mysql2
Seterusnya, konfigurasikan typeorm dalam 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 {}
Biasanya, sistem RBAC (Role-Based Access Control) akan mempunyai 5 jadual seperti berikut:
Model domain boleh digambarkan seperti berikut:
Seterusnya, kami akan membuat tiga jadual bukan perkaitan dalam Nest dan menentukan perhubungannya.
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Dalam jadual Pengguna, medan peranan ditakrifkan untuk menyambung dengan jadual perhubungan_peranan pengguna. Logik perhubungan ialah: user.id === userRoleRelation.userId dan role.id === userRoleRelation.roleId. Rekod Peranan yang sepadan dipautkan secara automatik kepada Pengguna.
nest new nest-project
Medan kebenaran dalam jadual Peranan berfungsi sama. Ia bersambung dengan jadual role_permission_relation menggunakan logik: role.id === rolePermissionRelation.roleId dan permission.id === rolePermissionRelation.permissionId.
npm install --save @nestjs/typeorm typeorm mysql2
Jadual Kebenaran tidak mempunyai hubungan; ia hanya merekodkan kebenaran yang tersedia.
Berikut ialah perkhidmatan untuk memulakan beberapa data ujian:
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 {}
Jalankan perkhidmatan initData melalui penyemak imbas atau Posmen, dan data akan mengisi pangkalan data.
Dengan struktur kebenaran asas yang ditetapkan, anda kini boleh melaksanakan ciri seperti pendaftaran, log masuk dan pengesahan berasaskan JWT.
Kini giliran anda!
Leapcell ialah Platform Tanpa Pelayan Generasi Seterusnya untuk Pengehosan Web, Tugas Async dan Redis:
Sokongan Berbilang Bahasa
Kerahkan projek tanpa had secara percuma
Kecekapan Kos yang tiada tandingan
Pengalaman Pembangun Diperkemas
Skalabilitas yang Mudah dan Prestasi Tinggi
Terokai lagi dalam Dokumentasi!
Ikuti kami di X: @LeapcellHQ
Baca di blog kami
Atas ialah kandungan terperinci Mereka bentuk Sistem Kebenaran RBAC dengan Nest.js: Panduan Langkah demi Langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!