Skip to content

A NestJS template project featuring a simple solution of role-based access control.

License

Notifications You must be signed in to change notification settings

gaosong886/nestjs-starter

Repository files navigation

NestJS Starter

License: MIT

一个使用 NestJS 构建的后端模板项目,提供接口级别的基于角色的访问控制。

功能

功能 方案 进度
认证 Passport (JWT) 已完成
鉴权 RBAC (基于角色的访问控制) 已完成
ORM 集成 TypeORM 已完成
缓存 ioredis 已完成
日志 winston 已完成
文件上传 multer 已完成
限流 nestjs/throttler 已完成
多语言 nestjs-i18n 已完成
  • 项目中目前没有包含单元测试规范,请根据需要添加。

资源

配置

首先,参考模板文件 .env.template 创建一个 .env 文件。

生成一对用于 JWT 认证的 RSA 密钥。

$ ssh-keygen -t rsa -b 2048 -m PEM -f private.key
$ openssl rsa -in private.key -pubout -outform PEM -out public.key

将密钥文件转换为 base64 格式,复制 base64 文本填写到 .env 文件中。

# JWT_PRIVATE_KEY_BASE64=
$ base64 -i private.key

# JWT_PUBLIC_KEY_BASE64=
$ base64 -i public.key

启动 MySQL 和 Redis。使用 resources/init.sql 初始化数据库,里面提供项目启动所需的初始数据。

启动项目

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

也可以使用 Docker 来运行项目,更多信息请查看项目根目录下的 package.jsonDockerfile

关于访问控制

项目基于 RBAC 模型进行访问控制,粒度到控制器方法。涉及到的元素有 用户 (User)角色 (Role)菜单 (Menu)权限 (Permission)

其中 权限 (Permission) 是基于控制器的路径自动生成的。例如,当项目中有下面的控制器:

@Controller('demo')
export class DemoController {
  @Get('list')
  async list(@Req() req: Request): Promise<DemoEntity> {
   // ...
  }
}

在项目启动时,会自动生成一个权限字符串 demo:list 并将其插入到数据库中,我们在后台可以把 权限 (Permission)菜单 (Menu) 进行多对多的关联。

使用 @AvoidPermission() 装饰器的控制器方法不会生成权限字符串,在被访问时也不会检查权限。

About

A NestJS template project featuring a simple solution of role-based access control.

Topics

Resources

License

Stars

Watchers

Forks

Languages