序文
バックエンド管理システムには、アクセス制御やパーソナライズされたユーザー インターフェイスなどの機能が不可欠です。たとえば、スーパー管理者はすべてのページを表示でき、一般ユーザーはページ A と B にアクセスでき、VIP ユーザーはページ A、B、C、D を表示できます。これらの機能の背後にあるロジックは、次の 3 つの主要な概念の設計に基づいています。
- ユーザー: アリス、ボブ、チャーリーなどの基本単位。
- ロール: ユーザーは 1 つ以上のロールを持つことができます。たとえば、Alice は通常のユーザーと VIP の両方の役割を持つことができます。
- 権限: ロールは複数の権限に関連付けられています。たとえば、VIP ロールには表示、編集、追加の権限があり、スーパー管理者は表示、編集、追加、削除ができます。
この関係は次の図で表すことができます:
次に、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): ロールと権限の間の関係を追跡します。
ドメイン モデルは次のように視覚化できます。
次に、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 サービスを実行すると、データがデータベースに入力されます。
基本的な権限構造を設定すると、登録、ログイン、JWT ベースの認証などの機能を実装できるようになります。
次はあなたの番です!
私たちは Leapcell であり、NestJS プロジェクトをクラウドにデプロイするための最良の選択肢です。
Leapcell は、Web ホスティング、非同期タスク、および Redis のための次世代サーバーレス プラットフォームです:
多言語サポート
- JavaScript、Python、Go、または Rust で開発します。
無制限のプロジェクトを無料でデプロイ
- 使用料金のみお支払いください。リクエストや料金はかかりません。
比類のないコスト効率
- アイドル料金なしの従量課金制です。
- 例: $25 は、平均応答時間 60 ミリ秒で 694 万のリクエストをサポートします。
効率化された開発者エクスペリエンス
- 直感的な UI でセットアップが簡単です。
- 完全に自動化された CI/CD パイプラインと GitOps の統合。
- 実用的な洞察を得るリアルタイムのメトリクスとログ。
簡単な拡張性と高いパフォーマンス
- 自動スケーリングにより、高い同時実行性を簡単に処理できます。
- 運用上のオーバーヘッドはゼロです。構築だけに集中してください。
ドキュメントでさらに詳しく見てみましょう!
X でフォローしてください: @LeapcellHQ
ブログをお読みください
以上がNest.js を使用した RBAC 権限システムの設計: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

PythonとJavaScriptのパフォーマンスと効率の違いは、主に以下に反映されています。1)解釈された言語として、Pythonはゆっくりと実行されますが、開発効率が高く、迅速なプロトタイプ開発に適しています。 2)JavaScriptはブラウザ内の単一のスレッドに限定されていますが、マルチスレッドおよび非同期I/Oを使用してnode.jsのパフォーマンスを改善でき、両方とも実際のプロジェクトで利点があります。

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック









