鉴权
原创2026/3/5小于 1 分钟
新建权限守卫
nest g gu ./guard/authorizationimport { 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()
}
}至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。