基本
守卫是一个使用 @Injectable() 装饰器的类。 守卫应该实现 CanActivate 接口。
我们在守卫上可以进行一个对请求的获取,对请求做一些校验。
这是一个对请求是否具有权限的一个判断,这里做了一个动态的设置权限值。
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class YuicGuard implements CanActivate {
constructor(private levael: number = 0) {}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
const mylevel = request.query?.level;
console.log('守卫了', request.query?.level);
if (mylevel > this.levael) {
return true;
} else {
return false;
}
// return this.levael;
}
}
我们在使用的时候需要 @UseGuards(new YuicGuard(10))设置这个权限值是否满足通过这个请求,这样更具有操作性。
当然我们也可以设置全局守卫对全局进行一个守卫
在main.ts下使用app.useGlobalGuards(new YuicGuard())