feat(catalog) : ERP-197 — permissions catalog.products.* + sidebar + 3 miroirs RBAC #148
Reference in New Issue
Block a user
Delete Branch "feat/erp-197-permissions-catalog-products"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ERP-197 (M6 · 1.1) — Permissions produit + sidebar + 3 miroirs RBAC
Premier ticket back du module M6 (Catalogue produit). Le produit vit dans le module Catalog existant — aucun nouveau module.
Changements
catalog.products.viewetcatalog.products.manage(admin-only, décision C7 de la spec)./admin/products, icônemdi:package-variant-closed) placé sous « Répertoire transporteurs » dans la section Administration.config/sidebar.php(item + permission)frontend/tests/e2e/_fixtures/personas.ts(personas admin gagnent view/manage + lienproductsdansexpectedAdminLinks/ALL_ADMIN_LINKS; personas non-admin inchangés)SeedE2ECommand.php(miroir back du persona user-full)sidebar.catalog.products.Vérifications
make test: 873/873 ✅make nuxt-test: 667/667 ✅make php-cs-fixer-allow-risky: 0 fixapp:sync-permissions: 2 permissions ajoutéesBranche rebasée sur
developà jour (#147).Review back — ERP-197 (RBAC / sidebar), read-only.
Périmètre : permissions
catalog.products.view/catalog.products.manage+ item sidebar + 3 miroirs RBAC.Vérifié conforme :
module.resource.actionsnake_case (CatalogModule::permissions()).config/sidebar.php,frontend/tests/e2e/_fixtures/personas.ts(Admin only +expectedAdminLinks),SeedE2ECommand.php. Aucun drift.Verdict : ✅ aucun retour obligatoire.
Review M6 « Produit » — relecture croisée (couche données + couche application) sur le diff cumulé
develop…HEAD.Verdict : 0 bloquant, 0 important.
Assert\*en FR.priority:1+#[IsGranted('catalog.products.view')], mêmes filtres que la liste — conforme.Nits relevés (non bloquants) :
product.states:DEFAULT '[]'::jsonbcontredisait leCHECK (jsonb_array_length(states) >= 1)(default mort, jamais atteignable) → corrigé (commit30e7839).ProductExportControllerTest: letearDownréutilisait la constante des category-types (TEST_CATEGORY_TYPE_PREFIX) pour purger des storage-types → constante dédiéeTEST_STORAGE_PREFIX(commit30e7839).Site(cross-module) du controller utilisé seulement dans un commentaire@var; DQLp.id != :idau lieu de<>: cosmétiques, laissés tels quels.?pagination=falserenvoyant unarray: conforme (pattern établiClientProvider/SupplierProvider, échappatoire documentée pour alimenter les selects).Consolidée dans #154 : la pile M6 a été reciblée sur
developen une seule MR pour un CI unique. Commits intégralement inclus dans #154 — fermée sans merge individuel.Pull request closed