Maison > interface Web > js tutoriel > Conception d'un système d'autorisation RBAC avec Nest.js : un guide étape par étape

Conception d'un système d'autorisation RBAC avec Nest.js : un guide étape par étape

Barbara Streisand
Libérer: 2025-01-05 18:48:41
original
771 Les gens l'ont consulté

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

Préface

Pour les systèmes de gestion backend, des fonctionnalités telles que le contrôle d'accès et les interfaces utilisateur personnalisées sont essentielles. Par exemple, un super administrateur peut afficher toutes les pages, les utilisateurs réguliers peuvent accéder aux pages A et B et les utilisateurs VIP peuvent afficher les pages A, B, C et D. La logique derrière ces fonctionnalités repose sur la conception de trois concepts clés :

  • Utilisateur : L'unité de base, telle que Alice, Bob, Charlie.
  • Rôle : Un utilisateur peut avoir un ou plusieurs rôles. Par exemple, Alice peut avoir à la fois les rôles d'utilisateur régulier et de VIP.
  • Permission : Un rôle est associé à plusieurs autorisations. Par exemple, le rôle VIP peut disposer des autorisations nécessaires pour afficher, modifier et ajouter, tandis que le super-administrateur peut afficher, modifier, ajouter et supprimer.

La relation peut être illustrée par le schéma suivant :

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

Ensuite, nous utiliserons Nest pour mettre en œuvre les bases d'un tel système à partir de zéro : la conception des autorisations.

Création de la base de données

Tout d’abord, nous devons créer la base de données. Nous allons utiliser la base de données MySQL et exécuter la commande suivante pour la créer :

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Copier après la connexion
Copier après la connexion

Initialisation du projet

Nous allons démarrer un nouveau projet Nest en exécutant la commande suivante :

nest new nest-project
Copier après la connexion
Copier après la connexion

Ensuite, installez les dépendances de base de données nécessaires, principalement typeorm et mysql2 :

npm install --save @nestjs/typeorm typeorm mysql2
Copier après la connexion
Copier après la connexion

Ensuite, configurez typeorm dans 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 {}
Copier après la connexion
Copier après la connexion

Conception de tableaux

En général, un système RBAC (Role-Based Access Control) aura 5 tables comme suit :

  • Tableau des utilisateurs (utilisateur) : stocke les informations utilisateur de base telles que le nom d'utilisateur, le mot de passe et l'adresse e-mail.
  • Table des rôles (rôle) : stocke les détails du rôle tels que le nom du rôle et le code du rôle.
  • Tableau des autorisations (autorisation) : stocke les détails de l'autorisation tels que le nom de l'autorisation et le code d'autorisation.
  • Table de relation utilisateur-rôle (user_role_relation) : suit la relation entre les utilisateurs et les rôles.
  • Table de relation rôle-autorisation (role_permission_relation) : suit la relation entre les rôles et les autorisations.

Le modèle de domaine peut être visualisé comme suit :

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

Ensuite, nous allons créer trois tables sans relation dans Nest et définir leurs relations.

utilisateur.entité.ts :

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Copier après la connexion
Copier après la connexion

Dans la table User, le champ rôles est défini pour se connecter à la table user_role_relation. La logique de relation est la suivante : user.id === userRoleRelation.userId et role.id === userRoleRelation.roleId. Les enregistrements de rôle correspondants sont automatiquement liés à l'utilisateur.

rôle.entité.ts :

nest new nest-project
Copier après la connexion
Copier après la connexion

Le champ des autorisations dans le tableau Rôle fonctionne de la même manière. Il se connecte à la table role_permission_relation en utilisant la logique : role.id === rolePermissionRelation.roleId et permission.id === rolePermissionRelation.permissionId.

permission.entity.ts :

npm install --save @nestjs/typeorm typeorm mysql2
Copier après la connexion
Copier après la connexion

La table Autorisation n’a pas de relations ; il enregistre simplement les autorisations disponibles.

Initialisation des données

Voici un service pour initialiser certaines données de test :

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 {}
Copier après la connexion
Copier après la connexion

Exécutez le service initData via un navigateur ou Postman, et les données rempliront la base de données.

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


Une fois la structure d'autorisation de base configurée, vous pouvez désormais implémenter des fonctionnalités telles que l'enregistrement, la connexion et l'authentification basée sur JWT.

Maintenant, c'est votre tour !


Nous sommes Leapcell, votre premier choix pour déployer des projets NestJS sur le cloud.

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

Leapcell est la plate-forme sans serveur de nouvelle génération pour l'hébergement Web, les tâches asynchrones et Redis :

Support multilingue

  • Développer avec JavaScript, Python, Go ou Rust.

Déployez un nombre illimité de projets gratuitement

  • payez uniquement pour l'utilisation – aucune demande, aucun frais.

Une rentabilité imbattable

  • Payez à l'utilisation sans frais d'inactivité.
  • Exemple : 25 $ prend en charge 6,94 millions de requêtes avec un temps de réponse moyen de 60 ms.

Expérience de développeur simplifiée

  • Interface utilisateur intuitive pour une configuration sans effort.
  • Pipelines CI/CD entièrement automatisés et intégration GitOps.
  • Mesures et journalisation en temps réel pour des informations exploitables.

Évolutivité sans effort et hautes performances

  • Mise à l'échelle automatique pour gérer facilement une concurrence élevée.
  • Zéro frais opérationnels – concentrez-vous uniquement sur la construction.

Explorez-en davantage dans la documentation !

Suivez-nous sur X : @LeapcellHQ


À lire sur notre blog

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal