Study
NestJS

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.

Editor Latihan

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.