Vladddosss
@Vladddosss

Почему Nest decorator работает по любому запросу, даже если сам декоратор отсутствует?

Здравствуйте!

Я указал на декоратор в одном маршруте, но он вообще не работал. Затем я подключил guard к модулю, как показано в документации. Теперь guard обрабатывает любой запрос. по любому маршруту, даже там где нет декоратора

Так ли это должно быть?

Не могли бы вы подсказать мне, как я могу заставить декоратор работать только на тех маршрутах, где присутствует декоратор?

export const Permissions = (...permissions: PermissionEnum[]) =>
  SetMetadata('permissions', permissions);

@Injectable()
export class PermissionGuard implements CanActivate {
  constructor(private reflector: Reflector) {}

  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    const requirePermissions = this.reflector.getAllAndOverride<
      PermissionEnum[]
    >('permissions', [context.getHandler(), context.getClass()]);
    console.log(requirePermissions, 'requirePermissions');
    if (!requirePermissions) {
      throw new HttpException(
        lang.ru.http_exceptions.forbidden,
        HttpStatus.FORBIDDEN,
      );
    }

    const user = context.switchToHttp().getRequest();
    //console.log(context.switchToHttp(), 'switchToHttp');
    //console.log(context.switchToHttp().getRequest(), 'getRequest');
    return false;
  }
}

@HttpCode(201)
  @UseGuards(JwtAuthGuard)
  @Permissions(PermissionEnum.USER_VIEW)
  @Get('/users')
  getAll(@Query() query: AdminUserQueryDto) {
    return this.adminService.getUsers(query);
  }

@Module({
 ...
  providers: [RoleService, { provide: APP_GUARD, useClass: PermissionGuard }],
  ...
})
export class RoleModule {}
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы