我有一个名为的模块AdminModule,它应该受AdminGuard.
我尝试直接在模块中设置 Guard,如下所示:
@Module({
imports: [
HttpModule,
],
controllers: [AdminController],
providers: [
{
provide: APP_GUARD,
useClass: AdminGuard,
},
AdminService,
],
})
export class AdminModule {
}
Run Code Online (Sandbox Code Playgroud)
但是,守卫不限于此模块,而是全局的(如文档中所述:)"the guard is, in fact, global"。
但是怎么可能让守卫只保护一个模块呢?
更新:实际上没有选择来实现这一点。
信息 :
你通过使用所做的APP_GUARD是在全球范围内应用它。它与 using 相同useGlobalGuards,但这种方式允许您利用 DI 系统。
{
provide: APP_GUARD,
useClass: AdminGuard,
},
Run Code Online (Sandbox Code Playgroud)
如果您不想全局应用它,请不要将其添加到模块中提供者的数组中。
相反,只需像这样创建一个新的守卫
@Injectable()
export class RolesGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档:https : //docs.nestjs.com/guards
然后在类级别将其应用于您的控制器以影响控制器的所有处理程序,或应用于影响特定端点的方法。
@UseGuards(RolesGuard)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2179 次 |
| 最近记录: |