- Added `auditLogEdge.js` for Edge Runtime compatible audit logging, including console logging and API fallback. - Introduced `auditLogSafe.js` for safe audit logging without direct database imports, ensuring compatibility across runtimes. - Enhanced `auth.js` to integrate safe audit logging for login actions, including success and failure cases. - Created middleware `auditLog.js` to facilitate audit logging for API routes with predefined configurations. - Updated `middleware.js` to allow API route access without authentication checks. - Added tests for audit logging functionality and Edge compatibility in `test-audit-logging.mjs` and `test-edge-compatibility.mjs`. - Implemented safe audit logging tests in `test-safe-audit-logging.mjs` to verify functionality across environments.
56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
"use client";
|
|
|
|
import { useSession } from "next-auth/react";
|
|
import { useRouter } from "next/navigation";
|
|
import { useEffect } from "react";
|
|
import AuditLogViewer from "@/components/AuditLogViewer";
|
|
|
|
export default function AuditLogsPage() {
|
|
const { data: session, status } = useSession();
|
|
const router = useRouter();
|
|
|
|
useEffect(() => {
|
|
if (status === "loading") return; // Still loading
|
|
|
|
if (!session) {
|
|
router.push("/auth/signin");
|
|
return;
|
|
}
|
|
|
|
// Only allow admins and project managers to view audit logs
|
|
if (!["admin", "project_manager"].includes(session.user.role)) {
|
|
router.push("/");
|
|
return;
|
|
}
|
|
}, [session, status, router]);
|
|
|
|
if (status === "loading") {
|
|
return (
|
|
<div className="min-h-screen flex items-center justify-center">
|
|
<div className="animate-spin rounded-full h-32 w-32 border-b-2 border-gray-900"></div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
if (!session || !["admin", "project_manager"].includes(session.user.role)) {
|
|
return (
|
|
<div className="min-h-screen flex items-center justify-center">
|
|
<div className="text-center">
|
|
<h1 className="text-2xl font-bold text-gray-900 mb-4">
|
|
Access Denied
|
|
</h1>
|
|
<p className="text-gray-600">
|
|
You don't have permission to view this page.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className="min-h-screen bg-gray-100">
|
|
<AuditLogViewer />
|
|
</div>
|
|
);
|
|
}
|