Skip to content

Instantly share code, notes, and snippets.

@devhammed
Last active August 22, 2025 15:55
Show Gist options
  • Save devhammed/75a5fb90c2d0b468aa2bf332e254e960 to your computer and use it in GitHub Desktop.
Save devhammed/75a5fb90c2d0b468aa2bf332e254e960 to your computer and use it in GitHub Desktop.
Custom Class Serializer Interceptor (support for automatically adding user roles)
import {
Injectable,
ExecutionContext,
CallHandler,
ClassSerializerInterceptor,
PlainLiteralObject,
} from '@nestjs/common';
import { Request } from 'express';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class CustomClassSerializerInterceptor extends ClassSerializerInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {
const request = context.switchToHttp().getRequest<Request>();
const user = request.user;
const groups = user ? [user.role.toString()] : [];
const contextOptions = this.getContextOptions(context);
const options = {
...this.defaultOptions,
...contextOptions,
groups: [...groups, ...(contextOptions?.groups ?? [])],
};
return next
.handle()
.pipe(
map((res: PlainLiteralObject | PlainLiteralObject[]) =>
this.serialize(res, options),
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment