ホームページ >ウェブフロントエンド >jsチュートリアル >Nest.js を使用した RBAC 権限システムの設計: ステップバイステップ ガイド

Nest.js を使用した RBAC 権限システムの設計: ステップバイステップ ガイド

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 18:48:41712ブラウズ

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

序文

バックエンド管理システムには、アクセス制御やパーソナライズされたユーザー インターフェイスなどの機能が不可欠です。たとえば、スーパー管理者はすべてのページを表示でき、一般ユーザーはページ A と B にアクセスでき、VIP ユーザーはページ A、B、C、D を表示できます。これらの機能の背後にあるロジックは、次の 3 つの主要な概念の設計に基づいています。

  • ユーザー: アリス、ボブ、チャーリーなどの基本単位。
  • ロール: ユーザーは 1 つ以上のロールを持つことができます。たとえば、Alice は通常のユーザーと VIP の両方の役割を持つことができます。
  • 権限: ロールは複数の権限に関連付けられています。たとえば、VIP ロールには表示、編集、追加の権限があり、スーパー管理者は表示、編集、追加、削除ができます。

この関係は次の図で表すことができます:

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

次に、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 つのテーブルがあります:

  • ユーザー テーブル (ユーザー): ユーザー名、パスワード、電子メールなどの基本的なユーザー情報を保存します。
  • ロール テーブル (ロール): ロール名やロール コードなどのロールの詳細を保存します。
  • 権限テーブル (権限): 権限名や権限コードなどの権限の詳細を保存します。
  • ユーザーとロールの関係テーブル (user_role_relation): ユーザーとロール間の関係を追跡します。
  • ロールと権限の関係テーブル (role_permission_relation): ロールと権限の間の関係を追跡します。

ドメイン モデルは次のように視覚化できます。

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

次に、Nest に 3 つの非リレーション テーブルを作成し、それらのリレーションシップを定義します。

user.entity.ts:

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

User テーブルでは、user_role_relation テーブルに接続するためにロール フィールドが定義されています。関係ロジックは次のとおりです: user.id === userRoleRelation.userId および role.id === userRoleRelation.roleId。一致する役割レコードは自動的にユーザーにリンクされます。

role.entity.ts:

nest new nest-project

役割テーブルの権限フィールドも同様に機能します。これは、ロジック role.id === rolePermissionRelation.roleId および Permission.id === rolePermissionRelation.permissionId.

を使用して、role_permission_relation テーブルに接続します。

許可.entity.ts:

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 サービスを実行すると、データがデータベースに入力されます。

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


基本的な権限構造を設定すると、登録、ログイン、JWT ベースの認証などの機能を実装できるようになります。

次はあなたの番です!


私たちは Leapcell であり、NestJS プロジェクトをクラウドにデプロイするための最良の選択肢です。

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

Leapcell は、Web ホスティング、非同期タスク、および Redis のための次世代サーバーレス プラットフォームです:

多言語サポート

  • JavaScript、Python、Go、または Rust で開発します。

無制限のプロジェクトを無料でデプロイ

  • 使用料金のみお支払いください。リクエストや料金はかかりません。

比類のないコスト効率

  • アイドル料金なしの従量課金制です。
  • 例: $25 は、平均応答時間 60 ミリ秒で 694 万のリクエストをサポートします。

効率化された開発者エクスペリエンス

  • 直感的な UI でセットアップが簡単です。
  • 完全に自動化された CI/CD パイプラインと GitOps の統合。
  • 実用的な洞察を得るリアルタイムのメトリクスとログ。

簡単な拡張性と高いパフォーマンス

  • 自動スケーリングにより、高い同時実行性を簡単に処理できます。
  • 運用上のオーバーヘッドはゼロです。構築だけに集中してください。

ドキュメントでさらに詳しく見てみましょう!

X でフォローしてください: @LeapcellHQ


ブログをお読みください

以上がNest.js を使用した RBAC 権限システムの設計: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。