You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
758 B
24 lines
758 B
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
|
|
import { Reflector } from '@nestjs/core';
|
|
import { User } from '../modules/user/user.entity';
|
|
import { Role } from '../modules/roles/roles.entity';
|
|
|
|
@Injectable()
|
|
export class RolesGuard implements CanActivate {
|
|
constructor(private readonly reflector: Reflector) {}
|
|
|
|
canActivate(context: ExecutionContext): boolean {
|
|
const roles = this.reflector.get<string[]>('roles', context.getHandler());
|
|
|
|
if (!roles) {
|
|
return true;
|
|
}
|
|
|
|
const request = context.switchToHttp().getRequest();
|
|
const user: User = request.user;
|
|
const hasRole = () =>
|
|
user.roles.some((role: Role) => roles.includes(role.name));
|
|
|
|
return user && user.roles && hasRole();
|
|
}
|
|
}
|