เราสามารถใช้ Guards ในการตรวจสอบสิทธิ์การใช้งานของผู้ใช้
จากตัวอย่างใน Setting roles per handler เป็นการเช็คสิทธิ์แยกตาม handler ใน controller โดยเราจะตั้งค่า permissions ผ่านทาง @SetMetadata เหนือ handler นั้นๆดังนี้
@SetMetadata('permissions', ['create_user'])
async create(@Body() createUserDto: CreateUserDto) {
this.userService.create(createUserDto);
}
และมีวิธีเรียกใช้ค่า permissions ใน Guard ดังนี้
const permissions = this.reflector.get<string[]>('permissions', context.getHandler());
อย่างไรก็ตาม เราสามารถตั้งค่า roles สำหรับ controller นั้นๆแทน handler ได้ ถ้าหากทุก handler ใน controller นั้นๆ ใช้สิทธิ์เดียวกันทั้งหมด โดยเราจะตั้งค่า permissions ผ่านทาง @SetMetadata เหนือ class ของ controller นั้นๆดังนี้
@SetMetadata('permissions', ['create_user'])
export class Controller {
async create(@Body() createUserDto: CreateUserDto) {
this.userService.create(createUserDto);
}
}
และมีวิธีเรียกใช้ค่า permissions ใน Guard ดังนี้
const permissions = this.reflector.get<string[]>('permissions', context.getClass());
หมายเหตุ เราจะสังเกตได้ว่า parameter ตัวที่ 2 ของ this.reflector.get() มีความแตกต่างกัน ถ้าเราต้องการดึงค่า Metadata จาก handler เราจะใช้ context.getHandler() แต่ถ้าเราต้องการดึงค่า Metadata จาก class เราจะใช้ context.getClass() แทน