Decorators

Create Decorator

  • RolesDecorator
    @Roles(['admin'])
  • Create RolesDecorator
    import { Reflector } from '@nestjs/core';

export const Roles = Reflector.createDecorator<string[]>();

Usage

    @Post()
@Roles(['admin'])
async create(@Body() createCatDto: CreateCatDto) {

this.catsService.create(createCatDto);

}

RoleGuard

    import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { Roles } from './roles.decorator';

@Injectable()
export class RolesGuard implements CanActivate {

constructor(private reflector: Reflector) {}

canActivate(context: ExecutionContext): boolean {

const roles = this.reflector.get(Roles, context.getHandler());

if (!roles) {
return true;
}

const request = context.switchToHttp().getRequest();
const user = request.user;
return matchRoles(roles, user.roles);
}
}