Nest.js
- Restful API接口
- @ApiBearerAuth()
- 用在controller类上
- @Controller()
- 用在controller类上
- @Get(‘/xx/:id/yyy’)
- 用在方法上
- @ApiQuery({ name: ‘size’, required: true})
- 用在方法上
- @Query(‘size’) size: number = 10
- 用在方法的参数列表中
- @ApiBearerAuth()
- 授权(scope/role)检查
- 使用guards
- guards 守卫,守卫在中间件之后,管道之前执行,守卫返回true或者false,从而决定请求是否给下文执行
- 使用
-
自定义的guard类
- 在controller类上,使用@UseGuards装饰器指定自定义的guard类:@UseGuards(XxxGuard),如@UseGuards(PermissionGuard)
- 定义(如PermissionGuard)
@Injectable() export class PermissionGuard implements CanActive { constructor(private reflector: Reflector) canActivate(context: ExecutionContext): Boolean { // 提取装饰器参数备用 const requiredPermissions = this.reflector.getAllAndMerge<string[]>('permissions', [ context.getHandler(), context.getClass(), ]); // 提取请求参数备用 const { request } = context.switchToHttp().getRequest(); // 权限检查逻辑 const result = requiredPermissions.some((permission) => reuqest?.claim?.includes(permission)) return result; } }
-
自定义的权限检查装饰器
- 如@CheckPolicies(params)或@RequirePermissions(params),参数可以是一个需要拥有的权限数组,或者一个对象
- export const RequirePermissions = (…permissions: string[]) => SetMetadata(“permissions”, permissions))
- 在controller类或controller方法上使用它进行装饰
-
- 使用guards
- swagger
- 依赖注入
- 可以在main.ts中像.net core一样定义第三方依赖,如app.useGlobalGuards(new JwtAuthGuard());