import { useSession } from "next-auth/react"; import { useRouter } from "next/navigation"; import Loading from "../components/Loading"; const { data: session, status } = useSession(); const router = useRouter(); const currentUser = session?.user as any; /* ================= GUARD (FIXED) ================= */ useEffect(() => { // 1. tunggu session selesai load if (status === "loading") return; // 2. kalau belum login if (status === "unauthenticated") { router.replace("/login"); return; } const allowedRoles = ["ADMIN", "OPERATOR", "SUPERVISOR"]; if (!allowedRoles.includes(currentUser?.role)) { router.replace("/"); return; } // 3. kalau bukan admin → kick if (currentUser?.role && currentUser.role !== "ADMIN") { router.replace("/users"); return; } // 4. baru fetch data kalau aman }, [status, currentUser, id, router]); // optional safety (biar tidak flash UI) if (!session) return null; ALTER TABLE activity_logs CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; atau di bawah inventories ALTER DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; const session = await getServerSession(authOptions); if (!session || session.user.role !== "ADMIN") { return NextResponse.json( { message: "Unauthorized" }, { status: 403 } ); } npm install xlsx file-saver npm install --save-dev @types/file-saver