import { ExecutionContext, Injectable } from '@nestjs/common'; import { Roles } from '~/auth/enums'; import { ROLE_METADATA_KEY } from '../decorators'; import { AccessTokenGuard } from './access-token.guard'; @Injectable() export class RolesGuard extends AccessTokenGuard { async canActivate(context: ExecutionContext): Promise { await super.canActivate(context); const request = context.switchToHttp().getRequest(); const user = request.user; if (!user) { return false; } const allowedRoles = this.reflector.getAllAndOverride(ROLE_METADATA_KEY, [ context.getHandler(), context.getClass(), ]); if (!allowedRoles) { return true; } return allowedRoles.some((role) => user.roles.includes(role)); } }