feat(catalog) : M7 — permissions catalog.storages.* + sidebar + 3 miroirs RBAC (ERP-210) #162

Merged
tristan merged 1 commits from feat/erp-210-permissions-catalog-storages into develop 2026-06-30 05:59:04 +00:00
Owner

M7 · ERP-210 (1.1) — Permissions catalog.storages.* + sidebar + 3 miroirs RBAC

Socle RBAC du stockage (M7). Aucun nouveau module : le stockage vit dans Catalog et réutilisera le référentiel StorageType du M6. Câblage calqué exactement sur M6 catalog.products.* (même section Administration, admin-only).

Modifications

  • CatalogModule.php : permissions() expose catalog.storages.view + catalog.storages.manage.
  • config/sidebar.php : item /admin/storages (icône mdi:warehouse, gate catalog.storages.view, module catalog), section Administration, près des items Catalog.
  • 3 miroirs RBAC (règle ABSOLUE n°8) — view+manage attribués au seul rôle Admin :
    • config/sidebar.php
    • frontend/tests/e2e/_fixtures/personas.ts : storages ajouté au type union, à ALL_ADMIN_LINKS, aux expectedAdminLinks de super-admin + user-full, et view/manage aux permissions de user-full. Personas métier : rien.
    • SeedE2ECommand.php : miroir back du persona user-full.
  • frontend/i18n/locales/fr.json : clé sidebar.catalog.storages (« Gestion des stockages »).

Vérifications

  • app:sync-permissions : OK, 2 codes confirmés en base.
  • make php-cs-fixer-allow-risky : 0 fichier à corriger.
  • make test : garde-fous des 3 miroirs verts (seul échec = flaky JWT connu, sans rapport, passe en isolation).
  • make nuxt-test : 725/725.

Hors périmètre (ticket 1.1)

Pas d'endpoint /api/storages à ce stade — la vérif fonctionnelle « Admin 200 / métiers 403 » viendra avec le ticket API stockage.

## M7 · ERP-210 (1.1) — Permissions catalog.storages.* + sidebar + 3 miroirs RBAC Socle RBAC du stockage (M7). Aucun nouveau module : le stockage vit dans **Catalog** et réutilisera le référentiel `StorageType` du M6. Câblage calqué exactement sur M6 `catalog.products.*` (même section Administration, admin-only). ### Modifications - **`CatalogModule.php`** : `permissions()` expose `catalog.storages.view` + `catalog.storages.manage`. - **`config/sidebar.php`** : item `/admin/storages` (icône `mdi:warehouse`, gate `catalog.storages.view`, module `catalog`), section Administration, près des items Catalog. - **3 miroirs RBAC** (règle ABSOLUE n°8) — view+manage attribués **au seul rôle Admin** : - `config/sidebar.php` - `frontend/tests/e2e/_fixtures/personas.ts` : `storages` ajouté au type union, à `ALL_ADMIN_LINKS`, aux `expectedAdminLinks` de `super-admin` + `user-full`, et `view`/`manage` aux permissions de `user-full`. Personas métier : rien. - `SeedE2ECommand.php` : miroir back du persona `user-full`. - **`frontend/i18n/locales/fr.json`** : clé `sidebar.catalog.storages` (« Gestion des stockages »). ### Vérifications - `app:sync-permissions` : OK, 2 codes confirmés en base. - `make php-cs-fixer-allow-risky` : 0 fichier à corriger. - `make test` : garde-fous des 3 miroirs verts (seul échec = flaky JWT connu, sans rapport, passe en isolation). - `make nuxt-test` : 725/725. ### Hors périmètre (ticket 1.1) Pas d'endpoint `/api/storages` à ce stade — la vérif fonctionnelle « Admin 200 / métiers 403 » viendra avec le ticket API stockage.
tristan added the type/featbackfront labels 2026-06-29 13:25:35 +00:00
tristan added 1 commit 2026-06-29 13:25:35 +00:00
feat(catalog) : M7 — permissions catalog.storages.* + sidebar + 3 miroirs RBAC (ERP-210)
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 50s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 1m5s
c9c6d043a7
tristan added the M7-Stockage label 2026-06-29 13:28:41 +00:00
Author
Owner

Revue de code — M7 Stockages

🔴 Lien sidebar /admin/storages sans page frontendconfig/sidebar.php

L'item « Gestion des stockages » est livré actif (et les personas e2e l'attendent), mais aucune page n'existe sous frontend/modules/catalog/pages/admin/ (grep storages frontend/modules = 0 résultat). Tout porteur de catalog.storages.view clique → 404 / page blanche. Le test e2e ne fait qu'un toBeVisible, jamais de navigation, donc il reste vert et masque le lien mort.

→ Soit retirer / feature-flag l'item jusqu'à la livraison de la page, soit confirmer qu'un ticket ultérieur la livre avant la mise en prod.

Note RBAC (faible) : catalog.storages.view/.manage ne donne accès ni à /api/storage_types (gardé par catalog.products.view) ni à /api/sites — masqué tant que seul le persona full-admin porte la capacité, mais le besoin n'est pas auto-suffisant si un rôle restreint reçoit un jour ces seules permissions.

### Revue de code — M7 Stockages **🔴 Lien sidebar `/admin/storages` sans page frontend** — `config/sidebar.php` L'item « Gestion des stockages » est livré actif (et les personas e2e l'attendent), mais aucune page n'existe sous `frontend/modules/catalog/pages/admin/` (`grep storages frontend/modules` = 0 résultat). Tout porteur de `catalog.storages.view` clique → 404 / page blanche. Le test e2e ne fait qu'un `toBeVisible`, jamais de navigation, donc il reste vert et masque le lien mort. → Soit retirer / feature-flag l'item jusqu'à la livraison de la page, soit confirmer qu'un ticket ultérieur la livre avant la mise en prod. _Note RBAC (faible) : `catalog.storages.view/.manage` ne donne accès ni à `/api/storage_types` (gardé par `catalog.products.view`) ni à `/api/sites` — masqué tant que seul le persona full-admin porte la capacité, mais le besoin n'est pas auto-suffisant si un rôle restreint reçoit un jour ces seules permissions._
tristan merged commit 9098e1e45b into develop 2026-06-30 05:59:04 +00:00
Sign in to join this conversation.