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 :
La relation peut être illustrée par le schéma suivant :
Ensuite, nous utiliserons Nest pour mettre en œuvre les bases d'un tel système à partir de zéro : la conception des autorisations.
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;
Nous allons démarrer un nouveau projet Nest en exécutant la commande suivante :
nest new nest-project
Ensuite, installez les dépendances de base de données nécessaires, principalement typeorm et mysql2 :
npm install --save @nestjs/typeorm typeorm mysql2
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 {}
En général, un système RBAC (Role-Based Access Control) aura 5 tables comme suit :
Le modèle de domaine peut être visualisé comme suit :
Ensuite, nous allons créer trois tables sans relation dans Nest et définir leurs relations.
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
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.
nest new nest-project
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.
npm install --save @nestjs/typeorm typeorm mysql2
La table Autorisation n’a pas de relations ; il enregistre simplement les autorisations disponibles.
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 {}
Exécutez le service initData via un navigateur ou Postman, et les données rempliront la base de données.
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 !
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éployez un nombre illimité de projets gratuitement
Une rentabilité imbattable
Expérience de développeur simplifiée
Évolutivité sans effort et hautes performances
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!