首頁 > web前端 > js教程 > 使用 Nest.js 設計 RBAC 權限系統:逐步指南

使用 Nest.js 設計 RBAC 權限系統:逐步指南

Barbara Streisand
發布: 2025-01-05 18:48:41
原創
706 人瀏覽過

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

前言

對於後端管理系統,存取控制和個人化使用者介面等功能至關重要。例如,超級管理員可以查看所有頁面,一般使用者可以造訪A、B頁面,VIP使用者可以查看A、B、C、D頁面。這些功能背後的邏輯是基於三個關鍵概念的設計:

  • 使用者:基本單位,如Alice、Bob、Charlie。
  • 角色:使用者可以擁有一個或多個角色。例如,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 中建立三個非關係表並定義它們的關係。

使用者.實體.ts:

CREATE DATABASE `nest-database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
登入後複製
登入後複製

在User表中,定義了roles欄位來連接user_role_relation表。關係邏輯為:user.id === userRoleRelation.userId 和 role.id === userRoleRelation.roleId。匹配的角色記錄會自動連結到使用者。

角色.實體.ts:

nest new nest-project
登入後複製
登入後複製

角色表中的權限欄位的工作原理類似。它使用以下邏輯與 role_permission_relation 表連接: role.id === rolePermissionRelation.roleId 和permission.id === rolePermissionRelation.permissionId。

權限.entity.ts:

npm install --save @nestjs/typeorm typeorm mysql2
登入後複製
登入後複製

權限表沒有關係;它只是記錄可用的權限。

資料初始化

這是一個用來初始化一些測試資料的服務:

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 美元支援 694 萬個請求,平均回應時間為 60 毫秒。

簡化的開發者體驗

  • 直覺的使用者介面,輕鬆設定。
  • 完全自動化的 CI/CD 管道和 GitOps 整合。
  • 即時指標和日誌記錄以獲取可行的見解。

輕鬆的可擴充性和高效能

  • 自動擴展,輕鬆處理高並發。
  • 零營運開銷-只需專注於建置。

在文件中探索更多內容!

在 X 上追蹤我們:@LeapcellHQ


閱讀我們的部落格

以上是使用 Nest.js 設計 RBAC 權限系統:逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板