对于后端管理系统,访问控制和个性化用户界面等功能至关重要。例如,超级管理员可以查看所有页面,普通用户可以访问A、B页面,VIP用户可以查看A、B、C、D页面。这些功能背后的逻辑基于三个关键概念的设计:
关系可以用下图来说明:
接下来,我们将使用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 中创建三个非关系表并定义它们的关系。
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。匹配的角色记录会自动链接到用户。
nest new nest-project
角色表中的权限字段的工作原理类似。它使用以下逻辑与 role_permission_relation 表连接: role.id === rolePermissionRelation.roleId 和permission.id === rolePermissionRelation.permissionId。
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服务,数据将填充数据库。
设置基本权限结构后,您现在可以实现注册、登录和基于 JWT 的身份验证等功能。
现在轮到你了!
Leapcell 是用于 Web 托管、异步任务和 Redis 的下一代无服务器平台:
多语言支持
免费部署无限个项目
无与伦比的成本效率
简化的开发者体验
轻松的可扩展性和高性能
在文档中探索更多内容!
在 X 上关注我们:@LeapcellHQ
阅读我们的博客
以上是使用 Nest.js 设计 RBAC 权限系统:分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!