如何为Nest.js中的特定模块提供防护?

时间:2019-05-31 15:33:05

标签: nest

我有一个名为AdminModule的模块,该模块应受AdminGuard保护。

我试图像这样直接在模块中设置Guard:

@Module({
  imports: [
    HttpModule,
  ],
  controllers: [AdminController],
  providers: [
    {
      provide: APP_GUARD,
      useClass: AdminGuard,
    },
    AdminService,
  ],
})
export class AdminModule {
}

但是,警卫队不仅限于此模块,而是全局的(如文档中所述:“警卫队实际上是全局的”)。

但是如何使防护装置仅保护模块?

1 个答案:

答案 0 :(得分:0)

使用APP_GUARD所做的操作将其全局应用,与使用useGlobalGuards相同,但是这种方式使您可以利用DI系统

{
  provide: APP_GUARD,
  useClass: AdminGuard,
},

您应该做的就是建立这样一个新的后卫

@Injectable()
export class RolesGuard implements CanActivate {
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    return true;
  }
}

在此处查看文档:{​​{3}}

然后将其应用于类级别的控制器上,以影响控制器的所有处理程序

@UseGuards(RolesGuard)

希望对您有帮助