ホームページ >ウェブフロントエンド >jsチュートリアル >Nest.js を使用した RBAC 権限システムの設計: ステップバイステップ ガイド
バックエンド管理システムには、アクセス制御やパーソナライズされたユーザー インターフェイスなどの機能が不可欠です。たとえば、スーパー管理者はすべてのページを表示でき、一般ユーザーはページ A と B にアクセスでき、VIP ユーザーはページ A、B、C、D を表示できます。これらの機能の背後にあるロジックは、次の 3 つの主要な概念の設計に基づいています。
この関係は次の図で表すことができます:
次に、Nest を使用して、このようなシステムの基盤、つまり権限の設計を一から実装します。
まず、データベースを作成する必要があります。 MySQL データベースを使用し、次のコマンドを実行して作成します。
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
次のコマンドを実行して、新しい Nest プロジェクトを開始します。
nest new nest-project
次に、必要なデータベースの依存関係、主に typeorm と mysql2 をインストールします。
npm install --save @nestjs/typeorm typeorm mysql2
次に、app.module.ts で typeorm を構成します。
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 {}
通常、RBAC (ロールベースのアクセス制御) システムには次の 5 つのテーブルがあります:
ドメイン モデルは次のように視覚化できます。
次に、Nest に 3 つの非リレーション テーブルを作成し、それらのリレーションシップを定義します。
CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
User テーブルでは、user_role_relation テーブルに接続するためにロール フィールドが定義されています。関係ロジックは次のとおりです: user.id === userRoleRelation.userId および role.id === userRoleRelation.roleId。一致する役割レコードは自動的にユーザーにリンクされます。
nest new nest-project
役割テーブルの権限フィールドも同様に機能します。これは、ロジック role.id === rolePermissionRelation.roleId および Permission.id === rolePermissionRelation.permissionId.
を使用して、role_permission_relation テーブルに接続します。npm install --save @nestjs/typeorm typeorm mysql2
Permission テーブルにはリレーションシップがありません。利用可能な権限を記録するだけです。
いくつかのテスト データを初期化するサービスは次のとおりです:
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 {}
ブラウザまたは Postman 経由で initData サービスを実行すると、データがデータベースに入力されます。
基本的な権限構造を設定すると、登録、ログイン、JWT ベースの認証などの機能を実装できるようになります。
次はあなたの番です!
Leapcell は、Web ホスティング、非同期タスク、および Redis のための次世代サーバーレス プラットフォームです:
多言語サポート
無制限のプロジェクトを無料でデプロイ
比類のないコスト効率
効率化された開発者エクスペリエンス
簡単な拡張性と高いパフォーマンス
ドキュメントでさらに詳しく見てみましょう!
X でフォローしてください: @LeapcellHQ
ブログをお読みください
以上がNest.js を使用した RBAC 権限システムの設計: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。