From 7a4206a5227fb3b19808467ab0d5d3b7dd30eb62 Mon Sep 17 00:00:00 2001 From: neckfire Date: Sat, 20 Jun 2026 12:53:56 +0200 Subject: [PATCH] feat(auth): real JWT login, RBAC routes, RGPD cookie banner + users/journal admin --- DataSentinel/src/App.jsx | 40 ++- DataSentinel/src/components/Layout/Header.jsx | 4 +- DataSentinel/src/components/Layout/Layout.jsx | 2 + .../src/components/Layout/Sidebar.jsx | 26 +- .../src/components/common/CookieBanner.jsx | 53 ++++ .../components/common/CookieBanner.module.css | 74 +++++ DataSentinel/src/context/AuthContext.jsx | 23 +- DataSentinel/src/pages/Journal/Journal.jsx | 2 +- DataSentinel/src/pages/Login/Login.jsx | 62 +++-- DataSentinel/src/pages/Users/Users.jsx | 255 ++++++++++++++++-- DataSentinel/src/pages/Users/Users.module.css | 86 ++++++ DataSentinel/src/services/api.js | 146 +++++++++- 12 files changed, 693 insertions(+), 80 deletions(-) create mode 100644 DataSentinel/src/components/common/CookieBanner.jsx create mode 100644 DataSentinel/src/components/common/CookieBanner.module.css diff --git a/DataSentinel/src/App.jsx b/DataSentinel/src/App.jsx index f11b569..24306f8 100644 --- a/DataSentinel/src/App.jsx +++ b/DataSentinel/src/App.jsx @@ -12,14 +12,22 @@ import Fournisseur from './pages/Fournisseur/Fournisseur'; import Historique from './pages/Historique/Historique'; import Admin from './pages/Admin/Admin'; import Users from './pages/Users/Users'; +import Journal from './pages/Journal/Journal'; import Documentation from './pages/Documentation/Documentation'; import MentionsLegales from './pages/MentionsLegales/MentionsLegales'; import CGU from './pages/CGU/CGU'; -/* Composant pour protéger les routes nécessitant une authentification */ -function ProtectedRoute({ children }) { +/* Composant pour protéger les routes nécessitant une authentification. + * requireRole (optionnel) : restreint l'accès à un rôle précis (ex. "Admin"). */ +function ProtectedRoute({ children, requireRole }) { const { user } = useAuth(); - return user ? children : ; + if (!user) { + return ; + } + if (requireRole && user.role !== requireRole) { + return ; + } + return children; } /* Composant pour les routes publiques (login) */ @@ -61,8 +69,30 @@ function App() { } /> } /> } /> - } /> - } /> + + + + } + /> + + + + } + /> + + + + } + /> } /> diff --git a/DataSentinel/src/components/Layout/Header.jsx b/DataSentinel/src/components/Layout/Header.jsx index 31a2449..3692e77 100644 --- a/DataSentinel/src/components/Layout/Header.jsx +++ b/DataSentinel/src/components/Layout/Header.jsx @@ -44,8 +44,8 @@ export default function Header({ onToggleSidebar, sidebarOpen }) {