NAM-APJATEL/src/routes/ProtectedRoute.tsx

33 lines
937 B
TypeScript

import { Navigate, Outlet } from 'react-router';
import { useAuthStore } from '../features/auth/store';
interface ProtectedRouteProps {
requiresAuth?: boolean;
requiresAdmin?: boolean;
}
const ProtectedRoute = ({
requiresAuth = true,
requiresAdmin = false,
}: ProtectedRouteProps) => {
const { isAuthenticated, user } = useAuthStore();
// Jika memerlukan authentication tapi tidak authenticated, redirect ke login
if (requiresAuth && !isAuthenticated) {
return <Navigate to="/login" replace />;
}
// Jika sudah authenticated tapi mengakses halaman login, redirect ke dashboard
if (!requiresAuth && isAuthenticated) {
return <Navigate to="/dashboard" replace />;
}
// Jika memerlukan role admin tapi bukan admin, redirect ke dashboard
if (requiresAdmin && user?.role !== 'admin') {
return <Navigate to="/dashboard" replace />;
}
return <Outlet />;
};
export default ProtectedRoute;