Guards
Penjelasan
Guard adalah class mengimplementasikan CanActivate, method canActivate()-nya mengembalikan boolean (atau Promise<boolean>) — true berarti request BOLEH lanjut, false berarti DITOLAK (otomatis 403 Forbidden). Dipasang ke Controller/method lewat decorator @UseGuards(), paling umum dipakai untuk cek autentikasi/otorisasi.
Contoh Konsep
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest();
const token = request.headers['authorization'];
return !!token; // true kalau ada header authorization, false kalau tidak
}
}
// Dipakai di controller:
import { Controller, Get, UseGuards } from '@nestjs/common';
@Controller('dashboard')
@UseGuards(AuthGuard) // berlaku untuk SEMUA method di controller ini
export class DashboardController {
@Get()
index() {
return 'Selamat datang di dashboard';
}
}
Praktikum
Buat AdminGuard dengan canActivate() yang mengecek header 'x-role' harus bernilai 'admin' (return true kalau cocok). Pasang @UseGuards(AdminGuard) ke method delete() di sebuah controller.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
@UseGuards() bisa dipasang di level CLASS (berlaku semua method di controller itu) atau level METHOD tunggal (cuma satu route) — pilih level class kalau seluruh controller memang butuh proteksi yang sama, method kalau cuma satu-dua endpoint saja yang butuh.