27 lines
963 B
TypeScript
Executable File
27 lines
963 B
TypeScript
Executable File
import { CanActivate, ExecutionContext, ForbiddenException, Injectable } from "@nestjs/common";
|
|
import { FastifyRequest } from "fastify";
|
|
|
|
import { AuthMessage } from "../../../common/enums/message.enum";
|
|
import { Reflector } from "@nestjs/core";
|
|
import { RESELLER_ROUTE } from "../../../common/decorators/reseller.decorator";
|
|
|
|
@Injectable()
|
|
export class ResellerRouteGuard implements CanActivate {
|
|
constructor(private reflector: Reflector) {}
|
|
|
|
|
|
canActivate(context: ExecutionContext): boolean {
|
|
const requiredReseller = this.reflector.getAllAndOverride<boolean>(RESELLER_ROUTE, [context.getHandler(), context.getClass()]);
|
|
if (!requiredReseller) return true;
|
|
|
|
const req = context.switchToHttp().getRequest<FastifyRequest>();
|
|
const user = req.user;
|
|
|
|
if (!user) throw new ForbiddenException(AuthMessage.UNAUTHORIZED_ACCESS);
|
|
|
|
if (!user.isReseller) throw new ForbiddenException(AuthMessage.UNAUTHORIZED_ACCESS);
|
|
|
|
return true;
|
|
}
|
|
}
|