Rumah > hujung hadapan web > tutorial js > Mereka bentuk Sistem Kebenaran RBAC dengan Nest.js: Panduan Langkah demi Langkah

Mereka bentuk Sistem Kebenaran RBAC dengan Nest.js: Panduan Langkah demi Langkah

Barbara Streisand
Lepaskan: 2025-01-05 18:48:41
asal
736 orang telah melayarinya

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

Mukadimah

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:

  • Pengguna: Unit asas, seperti Alice, Bob, Charlie.
  • Peranan: Pengguna boleh mempunyai satu atau lebih peranan. Contohnya, Alice mungkin mempunyai kedua-dua peranan sebagai pengguna biasa dan VIP.
  • Kebenaran: Peranan dikaitkan dengan berbilang kebenaran. Contohnya, peranan VIP mungkin mempunyai kebenaran untuk melihat, mengedit dan menambah, manakala pentadbir super boleh melihat, mengedit, menambah dan memadam.

Hubungan boleh digambarkan dengan rajah berikut:

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

Seterusnya, kami akan menggunakan Nest untuk melaksanakan asas sistem sedemikian dari awal — reka bentuk kebenaran.

Mencipta Pangkalan Data

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;
Salin selepas log masuk
Salin selepas log masuk

Permulaan Projek

Kami akan memulakan projek Nest baharu dengan menjalankan arahan berikut:

nest new nest-project
Salin selepas log masuk
Salin selepas log masuk

Kemudian, pasangkan kebergantungan pangkalan data yang diperlukan, terutamanya typeorm dan mysql2:

npm install --save @nestjs/typeorm typeorm mysql2
Salin selepas log masuk
Salin selepas log masuk

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 {}
Salin selepas log masuk
Salin selepas log masuk

Reka Bentuk Meja

Biasanya, sistem RBAC (Role-Based Access Control) akan mempunyai 5 jadual seperti berikut:

  • Jadual pengguna (pengguna): Menyimpan maklumat pengguna asas seperti nama pengguna, kata laluan dan e-mel.
  • Jadual peranan (peranan): Menyimpan butiran peranan seperti nama peranan dan kod peranan.
  • Jadual kebenaran (kebenaran): Menyimpan butiran kebenaran seperti nama kebenaran dan kod kebenaran.
  • Jadual perhubungan peranan pengguna (hubungan_peranan pengguna): Menjejaki perhubungan antara pengguna dan peranan.
  • Jadual perhubungan kebenaran peranan (perhubungan_permission_permission): Menjejaki hubungan antara peranan dan kebenaran.

Model domain boleh digambarkan seperti berikut:

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

Seterusnya, kami akan membuat tiga jadual bukan perkaitan dalam Nest dan menentukan perhubungannya.

user.entity.ts:

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Salin selepas log masuk
Salin selepas log masuk

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.

role.entity.ts:

nest new nest-project
Salin selepas log masuk
Salin selepas log masuk

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.

permission.entity.ts:

npm install --save @nestjs/typeorm typeorm mysql2
Salin selepas log masuk
Salin selepas log masuk

Jadual Kebenaran tidak mempunyai hubungan; ia hanya merekodkan kebenaran yang tersedia.

Permulaan Data

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 {}
Salin selepas log masuk
Salin selepas log masuk

Jalankan perkhidmatan initData melalui penyemak imbas atau Posmen, dan data akan mengisi pangkalan data.

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


Dengan struktur kebenaran asas yang ditetapkan, anda kini boleh melaksanakan ciri seperti pendaftaran, log masuk dan pengesahan berasaskan JWT.

Kini giliran anda!


Kami ialah Leapcell, pilihan utama anda untuk menggunakan projek NestJS ke awan.

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

Leapcell ialah Platform Tanpa Pelayan Generasi Seterusnya untuk Pengehosan Web, Tugas Async dan Redis:

Sokongan Berbilang Bahasa

  • Bangun dengan JavaScript, Python, Go atau Rust.

Kerahkan projek tanpa had secara percuma

  • bayar hanya untuk penggunaan — tiada permintaan, tiada caj.

Kecekapan Kos yang tiada tandingan

  • Bayar semasa anda pergi tanpa caj terbiar.
  • Contoh: $25 menyokong 6.94 juta permintaan pada purata masa tindak balas 60ms.

Pengalaman Pembangun Diperkemas

  • UI intuitif untuk persediaan mudah.
  • Saluran paip CI/CD automatik sepenuhnya dan penyepaduan GitOps.
  • Metrik masa nyata dan pengelogan untuk mendapatkan cerapan yang boleh diambil tindakan.

Skalabilitas yang Mudah dan Prestasi Tinggi

  • Penskalaan automatik untuk mengendalikan konkurensi tinggi dengan mudah.
  • Sifar operasi overhed — hanya fokus pada pembinaan.

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan