From ca64e5037fb1262b3ef62a5b17b2bb36f33a36d7 Mon Sep 17 00:00:00 2001 From: Imugiii Date: Tue, 16 Jun 2026 11:46:24 +0000 Subject: [PATCH] fix(admin): retire les liens de nav vers des pages non construites Le shell admin (layout.php) exposait, conditionnes par permission, 4 liens de navigation vers des routes inexistantes : /admin/menus, /admin/orders, /admin/users, /admin/roles. Un clic renvoyait un 404 JSON brut (le seed admin detient les 4 permissions, donc l'admin voyait les 4 liens morts). Liens retires tant que leur page n'existe pas ; les sections Operations et Administration disparaissent (leurs seuls items etaient morts), Menus quitte la section Catalogue. Un commentaire documente comment/quand les reactiver (avec leur route, P3 suite / P4). Dashboard / Categories / Produits (pages reelles) restent, la demo RBAC reste portee par le gating de Produits. Test : DashboardControllerTest assertait le rendu du lien /admin/users (mort) ; mis a jour en assertStringNotContainsString. Suite verte (188, 13 DB skip). --- src/app/Views/admin/layout.php | 29 +++++--------------- tests/Unit/Admin/DashboardControllerTest.php | 11 +++++--- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/app/Views/admin/layout.php b/src/app/Views/admin/layout.php index ea84009..a63f168 100644 --- a/src/app/Views/admin/layout.php +++ b/src/app/Views/admin/layout.php @@ -94,7 +94,7 @@ $navClass = static function (string $code, string $current): string { Tableau de bord - + - - - - - - - +
diff --git a/tests/Unit/Admin/DashboardControllerTest.php b/tests/Unit/Admin/DashboardControllerTest.php index e161e8d..30d4dab 100644 --- a/tests/Unit/Admin/DashboardControllerTest.php +++ b/tests/Unit/Admin/DashboardControllerTest.php @@ -150,10 +150,13 @@ final class DashboardControllerTest extends TestCase // Marqueur present UNIQUEMENT dans le fragment dashboard (absent du layout) : // verifie que le contenu est bien compose DANS le shell (pas un $content vide). self::assertStringContainsString('Bienvenue, Corentin J', $body); - // Navigation conditionnee aux permissions. - self::assertStringContainsString('/admin/products', $body); // product.read present - self::assertStringContainsString('/admin/users', $body); // user.read present - self::assertStringNotContainsString('/admin/roles', $body); // role.manage absent + // Navigation conditionnee aux permissions : un lien n'apparait que si la + // permission est presente ET la page existe. + self::assertStringContainsString('/admin/products', $body); // product.read present + page existante + // user.read est present, mais la page /admin/users n'existe pas encore : + // le lien est retire pour ne pas exposer un 404 (cf. layout.php). + self::assertStringNotContainsString('/admin/users', $body); + self::assertStringNotContainsString('/admin/roles', $body); // pas de page + role.manage absent // Deconnexion = formulaire POST avec CSRF. self::assertStringContainsString('action="/logout"', $body); self::assertStringContainsString('name="_csrf"', $body); -- 2.45.3