import { CanActivate, ExecutionContext, Injectable } from "@nestjs/common";
import { Reflector } from "@nestjs/core";
import { ROLES_KEY } from "../roles.decorator";
import type { AccountRole } from "../../users/account-user.entity";
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private readonly reflector: Reflector) {}
canActivate(context: ExecutionContext) {
const roles = this.reflector.getAllAndOverride<AccountRole[]>(ROLES_KEY, [
context.getHandler(),
context.getClass()
]);
if (!roles || roles.length === 0) return true;
const request = context.switchToHttp().getRequest();
const user = request.user;
return roles.includes(user?.role ?? "MEMBER");
}
}