mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-08-25 13:49:40 +00:00
29 lines
788 B
TypeScript
29 lines
788 B
TypeScript
import { ExecutionContext, Injectable } from '@nestjs/common';
|
|
import { Roles } from '~/auth/enums';
|
|
import { ROLE_METADATA_KEY } from '../decorators';
|
|
import { AccessTokenGuard } from './access-token.guard';
|
|
|
|
@Injectable()
|
|
export class RolesGuard extends AccessTokenGuard {
|
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
|
await super.canActivate(context);
|
|
|
|
const request = context.switchToHttp().getRequest();
|
|
const user = request.user;
|
|
|
|
if (!user) {
|
|
return false;
|
|
}
|
|
const allowedRoles = this.reflector.getAllAndOverride<Roles[]>(ROLE_METADATA_KEY, [
|
|
context.getHandler(),
|
|
context.getClass(),
|
|
]);
|
|
|
|
if (!allowedRoles) {
|
|
return true;
|
|
}
|
|
|
|
return allowedRoles.some((role) => user.roles.includes(role));
|
|
}
|
|
}
|