Spaces:
Sleeping
Sleeping
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; | |
import { Reflector } from '@nestjs/core'; | |
import { Role } from 'nest-access-control'; | |
import { ROLES_KEY } from './roles.decorator.js'; | |
() | |
export class RolesGuard implements CanActivate { | |
constructor(private reflector: Reflector) {} | |
canActivate(context: ExecutionContext): boolean { | |
const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [ | |
context.getHandler(), | |
context.getClass(), | |
]); | |
if (!requiredRoles) { | |
return true; | |
} | |
const { user } = context.switchToHttp().getRequest(); | |
return requiredRoles.some((role) => user.role.includes(role)); | |
} | |
} | |