import { CanActivate, ExecutionContext, Injectable } from "@nestjs/common"; import { Reflector } from "@nestjs/core"; import { RbacService } from "../rbac.service"; @Injectable() export class RolesGuard implements CanActivate { constructor( private reflector: Reflector, private rbacService: RbacService, ) {} async canActivate(context: ExecutionContext): Promise { const requiredRoles = this.reflector.getAllAndOverride("roles", [ context.getHandler(), context.getClass(), ]); if (!requiredRoles) { return true; } const { user } = context.switchToHttp().getRequest(); if (!user) { return false; } const userRoles = await this.rbacService.getUserRoles(user.sub); return requiredRoles.some((role) => userRoles.includes(role)); } }