nest开发:八 守卫guard

145 阅读1分钟

基本

守卫是一个使用 @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())