Files
n3wt-school/Front-End/src/components/ProtectedRoute.js
2025-05-01 14:12:21 +02:00

51 lines
1.7 KiB
JavaScript

import { useEffect, useState } from 'react';
import { useRouter } from 'next/navigation';
import { useEstablishment } from '@/context/EstablishmentContext';
import { FE_USERS_LOGIN_URL, getRedirectUrlFromRole } from '@/utils/Url';
import logger from '@/utils/logger';
const ProtectedRoute = ({ children, requiredRight }) => {
const { user, profileRole } = useEstablishment();
const router = useRouter();
const [hasRequiredRight, setHasRequiredRight] = useState(false);
// Vérifier si l'utilisateur a au moins un rôle correspondant au requiredRight
useEffect(() => {
logger.debug({
user,
profileRole,
requiredRight,
hasRequiredRight,
});
if (user && profileRole !== null) {
let requiredRightChecked = false;
if (requiredRight && Array.isArray(requiredRight)) {
// Vérifier si l'utilisateur a le droit requis
requiredRightChecked = requiredRight.some(
(right) => profileRole === right
);
} else {
requiredRightChecked = profileRole === requiredRight;
}
setHasRequiredRight(requiredRightChecked);
// Vérifier si l'utilisateur a le droit requis mais pas le bon role on le redirige la page d'accueil associé au role
if (!requiredRightChecked) {
const redirectUrl = getRedirectUrlFromRole(profileRole);
if (redirectUrl !== null) {
router.push(`${redirectUrl}`);
}
}
} else {
// User non authentifié
router.push(`${FE_USERS_LOGIN_URL}`);
}
}, [user, profileRole]);
// Autoriser l'affichage si authentifié et rôle correct
return hasRequiredRight ? children : null;
};
export default ProtectedRoute;