mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
fix: Correction du Establishment context au refresh
This commit is contained in:
@ -17,11 +17,11 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => {
|
||||
|
||||
const handleRoleChange = (roleId) => {
|
||||
// Pas bon quand on a plusieur role pour le même établissement
|
||||
setSelectedRoleId(roleId);
|
||||
const role = user.roles[roleId].role_type;
|
||||
setProfileRole(role);
|
||||
const establishmentId = user.roles[roleId].establishment__id;
|
||||
setProfileRole(role);
|
||||
setSelectedEstablishmentId(establishmentId);
|
||||
setSelectedRoleId(roleId);
|
||||
if (onRoleChange) {
|
||||
onRoleChange(roleId);
|
||||
}
|
||||
|
||||
@ -1,33 +1,47 @@
|
||||
import { useEffect } from 'react';
|
||||
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();
|
||||
let hasRequiredRight = false;
|
||||
|
||||
if (requiredRight && Array.isArray(requiredRight)) {
|
||||
// Vérifier si l'utilisateur a le droit requis
|
||||
hasRequiredRight = requiredRight.some((right) => profileRole === right);
|
||||
} else {
|
||||
hasRequiredRight = profileRole === requiredRight;
|
||||
}
|
||||
const [hasRequiredRight, setHasRequiredRight] = useState(false);
|
||||
|
||||
// Vérifier si l'utilisateur a au moins un rôle correspondant au requiredRight
|
||||
useEffect(() => {
|
||||
if (user) {
|
||||
logger.debug({
|
||||
user,
|
||||
profileRole,
|
||||
requiredRight,
|
||||
hasRequiredRight,
|
||||
});
|
||||
|
||||
if (user && profileRole) {
|
||||
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 (!hasRequiredRight) {
|
||||
if (!requiredRightChecked) {
|
||||
const redirectUrl = getRedirectUrlFromRole(profileRole);
|
||||
router.push(`${redirectUrl}`);
|
||||
if (redirectUrl !== null) {
|
||||
router.push(`${redirectUrl}`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// User non authentifié
|
||||
router.push(`${FE_USERS_LOGIN_URL}`);
|
||||
}
|
||||
}, [profileRole]);
|
||||
}, [user]);
|
||||
|
||||
// Autoriser l'affichage si authentifié et rôle correct
|
||||
return hasRequiredRight ? children : null;
|
||||
|
||||
@ -17,7 +17,7 @@ const SidebarItem = ({ icon: Icon, text, active, url, onClick }) => (
|
||||
</div>
|
||||
);
|
||||
|
||||
function Sidebar({ currentPage, items, onCloseMobile, onRoleChange }) {
|
||||
function Sidebar({ currentPage, items, onCloseMobile }) {
|
||||
const router = useRouter();
|
||||
|
||||
const [selectedItem, setSelectedItem] = useState(currentPage);
|
||||
@ -37,7 +37,7 @@ function Sidebar({ currentPage, items, onCloseMobile, onRoleChange }) {
|
||||
return (
|
||||
<div className="w-64 bg-white border-r h-full border-gray-200">
|
||||
<div className="border-b border-gray-200 ">
|
||||
<ProfileSelector onRoleChange={onRoleChange} className="border-none" />
|
||||
<ProfileSelector className="border-none" />
|
||||
</div>
|
||||
<nav className="space-y-1 px-4 py-6">
|
||||
{items.map((item) => (
|
||||
|
||||
Reference in New Issue
Block a user