在控制器里面可以附加metadata,在守卫里面可以通过reflector来获取到对应handler的metadata

This commit is contained in:
Jeremy Yin 2019-06-19 22:10:06 +08:00
parent 8bb51034c7
commit 81eee14d5d
2 changed files with 10 additions and 1 deletions

View File

@ -1,11 +1,19 @@
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { Reflector } from '@nestjs/core';
@Injectable()
export class DemoRolesGuard implements CanActivate {
constructor(private readonly reflector: Reflector) {}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
console.log('handler:', context.getHandler());
console.log('class:', context.getClass());
const roles = this.reflector.get<string[]>('roles', context.getHandler())
console.log(roles)
return false;
}
}

View File

@ -1,4 +1,4 @@
import { Controller, Get, Post, Req, Query, Headers, Param, Body, HttpException, HttpStatus, ForbiddenException, UseFilters, UsePipes, ValidationPipe, ParseIntPipe, UseGuards } from '@nestjs/common';
import { Controller, Get, Post, Req, Query, Headers, Param, Body, HttpException, HttpStatus, ForbiddenException, UseFilters, UsePipes, ValidationPipe, ParseIntPipe, UseGuards, SetMetadata } from '@nestjs/common';
import { CreatePostDto } from './post.dto';
import { DemoService } from './providers/demo/demo.service'
import { DemoFilter } from '../../core/filters/demo.filter'
@ -29,6 +29,7 @@ export class PostsController {
@Post()
// @UseFilters(DemoFilter)
@UsePipes(ValidationPipe)
@SetMetadata('roles', ['member', 89])
store(@Body() post: CreatePostDto) {
// throw new HttpException('没有权限!', HttpStatus.FORBIDDEN)
// throw new ForbiddenException('没有权限!')