跳至主要內容

鉴权

刘春龙原创...小于 1 分钟NodejsNestjs教程文档

新建权限守卫

nest g gu ./guard/authorization
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private readonly allowedRoles: string[]) { }

  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest();
    const user = request.user;
    console.log(this.allowedRoles)
    if (user && this.allowedRoles.includes(user.role)) {
      return true;
    }
    return false;
  }
}

模型

import { Entity, Column, PrimaryGeneratedColumn, BeforeInsert } from 'typeorm';
import * as bcrypt from 'bcrypt';
@Entity()
export class App {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    userName: string;

    @Column()
    passWord: string;

    @BeforeInsert()
    async hashPassword() {
        this.passWord = await bcrypt.hash(this.passWord, 10);
    }

    @Column({ default: true })
    isActive: boolean;

    @Column({ default: "user" })
    role: string;
}

使用

import { Controller, Get, UseGuards } from '@nestjs/common';
import { AppService } from './app.service';
import { AuthGuard } from 'src/guard/authentication/authentication.guard';
import { RolesGuard } from "src/guard/authorization/authorization.guard"
@Controller()
export class AppController {
  constructor(private readonly appService: AppService) { }

  @UseGuards(AuthGuard, new RolesGuard(['admin']))
  @Get()
  isAdmin() {
    return this.appService.isAdmin();
  }
}








 





上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7