【发布时间】:2020-08-03 07:24:02
【问题描述】:
我是nest.js 的新手,我有一个问题。 我有这样的角色守卫
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { Reflector } from '@nestjs/core';
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private readonly reflector: Reflector) {
}
canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
const roles = this.reflector.get<string[]>('roles', context.getHandler());
if (!roles) {
return true;
}
const request = context.switchToHttp().getRequest();
const user = request.user;
return user.role.some(role => !!roles.find(item => item === role));
}
}
现在我想把这个守卫用作这样的全局守卫
app.useGlobalGuards(new RolesGuard())
但是它说我需要将参数(反射器)传递给我在构造函数中提到的守卫,现在可以像这样初始化反射器了吗?
const reflector:Reflector = new Reflector();
app.useGlobalGuards(new RolesGuard(reflector))
或者有更好的方法吗?
【问题讨论】:
标签: node.js dependency-injection global guard