| 12345678910111213141516171819202122232425262728 |
- import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
- import { Reflector } from '@nestjs/core';
- import { ROLES_KEY } from './roles.decorator';
- import { UserRole } from '../user/user-role.enum';
- @Injectable()
- export class RolesGuard implements CanActivate {
- constructor(private reflector: Reflector) {}
- canActivate(context: ExecutionContext): boolean {
- const requiredRoles = this.reflector.getAllAndOverride<UserRole[]>(
- ROLES_KEY,
- [context.getHandler(), context.getClass()],
- );
- if (!requiredRoles) {
- return true;
- }
- const { user } = context.switchToHttp().getRequest();
- // User might not be injected yet if auth guard fails, but auth guard runs first usually.
- if (!user) {
- return false;
- }
- return requiredRoles.includes(user.role);
- }
- }
|