fix(admin): retire les liens de nav vers des pages non construites (#23)
Some checks failed
CI / secret-scan (push) Has been cancelled
CI / static-tests (push) Has been cancelled
CI / auto-merge (push) Has been cancelled
CI / php-lint (push) Has been cancelled

This commit is contained in:
Corentin JOGUET 2026-06-16 14:21:35 +02:00
parent 8ce1dc21de
commit c284c840d0
2 changed files with 14 additions and 26 deletions

View file

@ -94,7 +94,7 @@ $navClass = static function (string $code, string $current): string {
<a href="/admin/dashboard" class="<?= $navClass('dashboard', $active) ?>">Tableau de bord</a>
</div>
<?php if ($can('product.read') || $can('menu.read') || $can('category.manage')): ?>
<?php if ($can('category.manage') || $can('product.read')): ?>
<div class="sidebar-section">
<div class="sidebar-section-label">Catalogue</div>
<?php if ($can('category.manage')): ?>
@ -103,30 +103,15 @@ $navClass = static function (string $code, string $current): string {
<?php if ($can('product.read')): ?>
<a href="/admin/products" class="<?= $navClass('products', $active) ?>">Produits</a>
<?php endif; ?>
<?php if ($can('menu.read')): ?>
<a href="/admin/menus" class="<?= $navClass('menus', $active) ?>">Menus</a>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($can('order.read')): ?>
<div class="sidebar-section">
<div class="sidebar-section-label">Operations</div>
<a href="/admin/orders" class="<?= $navClass('orders', $active) ?>">Commandes</a>
</div>
<?php endif; ?>
<?php if ($can('user.read') || $can('role.manage')): ?>
<div class="sidebar-section">
<div class="sidebar-section-label">Administration</div>
<?php if ($can('user.read')): ?>
<a href="/admin/users" class="<?= $navClass('users', $active) ?>">Utilisateurs</a>
<?php endif; ?>
<?php if ($can('role.manage')): ?>
<a href="/admin/roles" class="<?= $navClass('roles', $active) ?>">Roles</a>
<?php endif; ?>
</div>
<?php endif; ?>
<?php /*
Items de nav volontairement absents tant que leur page n'existe pas
(un lien vers une route non enregistree renvoie un 404). A reactiver
avec leur route respective : Menus (menu.read), Commandes (order.read),
Utilisateurs (user.read), Roles (role.manage) -- P3 suite / P4.
*/ ?>
</nav>
<main class="content">

View file

@ -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);