В Nest.js, фреймворке для разработки приложений на основе Node.js, для передачи Guard с одного модуля в другой можно использовать механизмы зависимостей и инжекции.
Передача Guard из одного модуля в другой связана с созданием и использованием кастомного провайдера (provider). Provider - это класс, который предоставляет определенный объект или функцию внутри приложения. Guard может быть предоставлен как провайдер и затем использоваться в других модулях.
1. Создайте свой Guard:
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; @Injectable() export class MyGuard implements CanActivate { canActivate(context: ExecutionContext): boolean { // Ваш код проверки авторизации или другой проверки return true; // Возможно, что вам понадобится возвращать значение false для запрета доступа } }
2. Создайте модуль, который предоставит ваш Guard:
import { Module } from '@nestjs/common'; import { MyGuard } from './my.guard'; @Module({ providers: [MyGuard], // Предоставляем ваш Guard для использования в других модулях exports: [MyGuard], // Экспортируем, чтобы другие модули могли его импортировать }) export class GuardsModule {}
3. Используйте Guard в других модулях:
import { Module } from '@nestjs/common'; import { AuthModule } from './auth/auth.module'; import { SomeModule } from './some/some.module'; import { GuardsModule } from './guards/guards.module'; import { MyGuard } from './guards/my.guard'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [AuthModule, SomeModule, GuardsModule], // Импортируем GuardsModule controllers: [AppController], providers: [ AppService, { provide: 'APP_GUARD', // Используйте ключ 'APP_GUARD', чтобы указать, что это провайдер Guard useClass: MyGuard, // Использовать ваш Guard в качестве провайдера }, ], }) export class AppModule {}
4. Используйте Guard в контроллерах или других местах, где вам нужно выполнить проверку:
import { Controller, Get, UseGuards } from '@nestjs/common'; import { MyGuard } from './guards/my.guard'; @Controller('example') @UseGuards(MyGuard) // Используйте ваш Guard на уровне контроллера export class ExampleController { @Get() example(): string { return 'Пример использования Guard'; } }
Теперь ваш Guard будет внедрен в другие модули, и вы сможете использовать его для проверки авторизации или другой логики безопасности в ваших контроллерах или других местах, где это требуется.