generator-nest-js-boilerplate
Version:
This generator will help you to build your own Nest.js Mongodb API using TypeScript 4
37 lines (27 loc) • 913 B
text/typescript
import _ from 'lodash';
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { RolesEnum } from '@decorators/roles.decorator';
()
export default class RolesGuard implements CanActivate {
constructor(
private reflector: Reflector,
) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const roles = this.reflector.get<RolesEnum[]>('roles', context.getHandler());
if (_.isEmpty(roles)) {
return true;
}
const http = context.switchToHttp();
const req = http.getRequest();
const res = http.getResponse();
if (req.isUnauthenticated()) {
return res.redirect('/v1/auth/login');
}
const haveAccess: boolean = roles.some((role) => req?.user?.roles.includes(role));
if (!haveAccess) {
return res.redirect('/v1/home');
}
return true;
}
}