34 أسطر
1.1 KiB
TypeScript
34 أسطر
1.1 KiB
TypeScript
import { CanActivate, ExecutionContext, ForbiddenException, Injectable } from '@nestjs/common';
|
|
import { Reflector } from '@nestjs/core';
|
|
import { JwtPayload } from '../interfaces/jwt-payload.interface';
|
|
import { SUPERADMIN_PERMISSIONS_KEY } from '../decorators/superadmin-permissions.decorator';
|
|
|
|
@Injectable()
|
|
export class SuperAdminPermissionsGuard implements CanActivate {
|
|
constructor(private readonly reflector: Reflector) {}
|
|
|
|
canActivate(context: ExecutionContext): boolean {
|
|
const requiredPermissions = this.reflector.getAllAndOverride<string[]>(
|
|
SUPERADMIN_PERMISSIONS_KEY,
|
|
[context.getHandler(), context.getClass()],
|
|
);
|
|
|
|
if (!requiredPermissions?.length) {
|
|
return true;
|
|
}
|
|
|
|
const request = context.switchToHttp().getRequest<{ user?: JwtPayload }>();
|
|
const payload = request.user;
|
|
const grantedPermissions = new Set(payload?.permissions ?? []);
|
|
const hasAllPermissions = requiredPermissions.every((permission) =>
|
|
grantedPermissions.has(permission),
|
|
);
|
|
|
|
if (!hasAllPermissions) {
|
|
throw new ForbiddenException('Missing superadmin permission');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|