Membangun Sistem Audit Trail untuk Log Aktivitas Next.js (Part 9)
Menerapkan sistem otentikasi yang kuat dan pertahanan manipulasi data (seperti yang kita bahas di Part 7 dan 8) ibarat membangun tembok tebal dan brankas baja untuk aplikasi Anda. Namun, tembok yang tebal tidak akan ada gunanya jika Anda tidak tahu siapa saja yang memegang kunci dan apa yang mereka lakukan di dalam brankas tersebut.
Di sinilah konsep Audit Trail atau jejak rekam aktivitas mengambil peran. Dalam standar keamanan Enterprise, setiap operasi krusial yang memodifikasi data (Create, Update, Delete) wajib dicatat. Tujuannya adalah untuk Non-Repudiation—memastikan bahwa seorang pengguna (misalnya Admin atau Guru) tidak dapat menyangkal tindakan yang telah mereka lakukan di dalam sistem.
Pada jurnal Part 9 ini, kita akan merancang sistem Audit Trail otomatis di latar belakang menggunakan Next.js App Router dan Prisma ORM.
Mengapa Sistem Audit Trail Sangat Krusial?
- Investigasi Insiden (Forensik Digital): Jika terjadi kehilangan data secara misterius, log aktivitas akan menunjukkan dengan tepat siapa (User ID), kapan (Timestamp), dan dari mana (IP Address/User Agent) perintah tersebut dieksekusi.
- Pemulihan Bencana (Disaster Recovery): Dengan merekam data sebelum dan sesudah dimodifikasi (payload details), Anda memiliki referensi untuk mengembalikan data ke kondisi semula jika terjadi kesalahan human error.
- Kepatuhan (Compliance): Standar keamanan industri mengharuskan sistem untuk memiliki rekaman aktivitas pengguna secara transparan.
Langkah Praktis: Mengimplementasikan Audit Log dengan Prisma
1. Menambahkan Skema Tabel Audit di Prisma
Langkah pertama adalah membuat tabel khusus untuk menampung seluruh log. Buka file schema.prisma Anda dan tambahkan model berikut:
model AuditLog {
id Int @id @default(autoincrement())
userId Int // ID pengguna yang melakukan aksi
action String // Jenis aksi (contoh: "UPDATE_KELAS", "SOFT_DELETE_KELAS")
entity String // Tabel yang dipengaruhi (contoh: "Grades")
entityId Int // ID dari data yang diubah
details String? @db.Text // Rincian perubahan dalam format JSON
createdAt DateTime @default(now())
// Relasi ke tabel Users
user Users @relation(fields: [userId], references: [id])
}
Jangan lupa jalankan perintah npx prisma db push atau npx prisma migrate dev untuk menyinkronkan skema ini dengan database MySQL Anda.
2. Menyisipkan Perekaman Log pada API (Route Handlers)
Sekarang, mari kita modifikasi API Edit Kelas (metode PUT) yang telah kita buat di Part 8. Kita akan menambahkan logika untuk menyimpan log setelah proses pembaruan kelas berhasil. Buka kembali file app/api/kelas/route.ts:
import { getServerSession } from "next-auth/next";
import { NextResponse } from 'next/server';
import prisma from '@/lib/prisma'; // Sesuaikan path Prisma Anda
export async function PUT(request: Request) {
try {
const session = await getServerSession();
if (!session) {
return NextResponse.json({ status: 'error', message: 'Unauthorized' }, { status: 401 });
}
const userId = Number((session.user as any).id); // Ambil ID dari sesi NextAuth
const body = await request.json();
const { id, name, sort_order } = body;
// 1. Eksekusi Pembaruan Data Kelas (Seperti di Part 8)
const kelasDiperbarui = await prisma.grades.update({
where: { id: Number(id) },
data: {
name: name,
sort_order: Number(sort_order),
},
});
// 2. REKAM JEJAK (AUDIT TRAIL)
// Berjalan asinkron di latar belakang agar tidak memperlambat respon API
await prisma.auditLog.create({
data: {
userId: userId,
action: "UPDATE_KELAS",
entity: "Grades",
entityId: Number(id),
// Simpan rincian data baru untuk keperluan forensik
details: JSON.stringify({ name, sort_order }),
}
});
return NextResponse.json({
status: 'success',
message: 'Data kelas diperbarui dan log aktivitas telah dicatat.'
}, { status: 200 });
} catch (error) {
console.error("API Update & Audit Error:", error);
return NextResponse.json({ status: 'error', message: 'Terjadi kesalahan sistem.' }, { status: 500 });
}
}
3. Menjaga Performa Sistem (Asynchronous Logging)
Perhatikan bahwa proses penulisan log ke database sebaiknya tidak menghalangi atau memperlambat alur utama aplikasi. Dengan arsitektur Next.js dan Prisma, eksekusi prisma.auditLog.create berlangsung sangat cepat di sisi server, menjadikan pencatatan ini hampir tidak terasa oleh pengguna (Zero-latency impact).
Kesimpulan
Sistem tanpa log ibarat rumah mewah tanpa CCTV. Dengan mengimplementasikan Audit Trail sederhana menggunakan Prisma, Anda telah menaikkan level keamanan aplikasi dari sekadar "Aman" menjadi "Dapat Dipertanggungjawabkan" (Accountable).
Aplikasi LMS Anda kini sudah memiliki sistem otentikasi (NextAuth), proteksi injeksi data, mekanisme Soft Delete, pencegahan Parameter Tampering, dan dilengkapi dengan CCTV pencatat aktivitas. Pada seri penutup, Part 10, kita akan membahas ritual krusial sebelum aplikasi ini diluncurkan ke dunia nyata: Deployment Security dan manajemen file Environment yang aman.
0 Response to "Membangun Sistem Audit Trail untuk Log Aktivitas Next.js (Part 9)"
Posting Komentar