Files
talks-site/frontend/src/utils/RouteGuard.tsx
T

27 lines
761 B
TypeScript

import { useEffect, useState, type JSX } from "react";
import { Navigate, useLocation } from "react-router-dom";
import { getCurrentUser } from "../helper/auth";
export const RequireAdmin = ({ children }: { children: JSX.Element }) => {
const [isAdmin, setIsAdmin] = useState<boolean | null>(null);
const [loading, setLoading] = useState(true);
const location = useLocation();
useEffect(() => {
const checkAdmin = async () => {
const user = await getCurrentUser();
setIsAdmin(user.isAdmin);
setLoading(false);
};
checkAdmin();
}, []);
if (loading) return <div>Checking permissions...</div>;
if (!isAdmin) {
return <Navigate to="/unauthorized" state={{ from: location }} replace />;
}
return children;
};