[ERP-47] Déclarer le module Catalog et synchroniser RBAC #19

Merged
malio merged 3 commits from feature/ERP-47-declarer-module-catalog-rbac into develop 2026-05-28 09:45:34 +00:00
Owner

Contexte

Ticket Lesstime #47 — M0 position 0.5. Wire le nouveau module Catalog dans Starseed et synchronise les 3 sources RBAC (sidebar + personas E2E + seed back). Couvre RG-1.01 (Admin uniquement) côté infra.

Spec : docs/specs/M0-categories/spec-back.md § 5.1 + § 5.3.

Mode stacked PR — cible feature/ERP-46-exposer-category-type-lecture-seule, PAS develop. Quand la MR ERP-46 sera mergée sur develop, repointer la cible de cette MR vers develop.

Modifications (6 fichiers — règle ABSOLUE Starseed n°8 : les 3 sources RBAC bougent ENSEMBLE)

Fichier Rôle
src/Module/Catalog/CatalogModule.php (nouveau) Déclaration du module : ID=catalog, LABEL=Catalogue, REQUIRED=true, 2 permissions (view + manage)
config/modules.php Wire CatalogModule::class
config/sidebar.php Item « Gestion des catégories » dans section Administration, gate sur catalog.categories.view
frontend/i18n/locales/fr.json Clé sidebar.catalog.categories = Gestion des catégories
frontend/tests/e2e/_fixtures/personas.ts user-full reçoit les 2 permissions + 'categories' dans expectedAdminLinks. super-admin et ALL_ADMIN_LINKS étendus avec 'categories'. user-readonly inchangé (Admin-only au M0 — pas de mode read-only spec'é).
src/Module/Core/Infrastructure/Console/SeedE2ECommand.php Miroir back : user-full reçoit les 2 permissions

Décisions

  • REQUIRED = true : la spec § 5.1 + le prompt user disent true (Category sera FK NOT NULL côté futurs modules Tiers). Le ticket Lesstime dit false par erreur — j'ai suivi la spec.
  • Personas E2E « Admin » = user-full : pas de persona métier « Admin » explicite dans personas.ts (personas techniques : super-admin bypass, user-full = toutes permissions). user-full est l'équivalent fonctionnel.
  • user-readonly NON touché : RG-1.01 dit « Admin uniquement », pas de pattern read-only spec'é au M0. À rouvrir dans un futur ticket si besoin.

Validation

  • make php-cs-fixer-allow-risky ✓ (0 fichier corrigé)
  • make db-reset ✓ (sync-permissions : 11 codes en base, dont les 2 nouveaux catalog.categories.* vérifiés via dbal:run-sql)
  • make test ✓ (248 tests, 0 régression)
  • RG-1.01 vérifiée manuellement via curl :
    • Admin → 200 sur GET /api/categories et GET /api/category_types
    • Bob (zéro permission) → 403 sur GET /api/categories, POST /api/categories, GET /api/category_types
    • Anonyme → 401 sur GET /api/categories
## Contexte Ticket Lesstime #47 — M0 position 0.5. Wire le nouveau module **Catalog** dans Starseed et synchronise les 3 sources RBAC (sidebar + personas E2E + seed back). Couvre **RG-1.01** (Admin uniquement) côté infra. Spec : [`docs/specs/M0-categories/spec-back.md` § 5.1 + § 5.3](https://gitea.malio.fr/MALIO-DEV/Starseed/src/branch/feature/M0-spec-categories/docs/specs/M0-categories/spec-back.md). > ⚠ **Mode stacked PR** — cible `feature/ERP-46-exposer-category-type-lecture-seule`, **PAS** `develop`. Quand la MR ERP-46 sera mergée sur develop, repointer la cible de cette MR vers develop. ## Modifications (6 fichiers — règle ABSOLUE Starseed n°8 : les 3 sources RBAC bougent ENSEMBLE) | Fichier | Rôle | |---|---| | `src/Module/Catalog/CatalogModule.php` (nouveau) | Déclaration du module : `ID=catalog`, `LABEL=Catalogue`, `REQUIRED=true`, 2 permissions (`view` + `manage`) | | `config/modules.php` | Wire `CatalogModule::class` | | `config/sidebar.php` | Item « Gestion des catégories » dans section Administration, gate sur `catalog.categories.view` | | `frontend/i18n/locales/fr.json` | Clé `sidebar.catalog.categories` = `Gestion des catégories` | | `frontend/tests/e2e/_fixtures/personas.ts` | `user-full` reçoit les 2 permissions + `'categories'` dans `expectedAdminLinks`. `super-admin` et `ALL_ADMIN_LINKS` étendus avec `'categories'`. `user-readonly` inchangé (Admin-only au M0 — pas de mode read-only spec'é). | | `src/Module/Core/Infrastructure/Console/SeedE2ECommand.php` | Miroir back : `user-full` reçoit les 2 permissions | ## Décisions - **`REQUIRED = true`** : la spec § 5.1 + le prompt user disent `true` (Category sera FK NOT NULL côté futurs modules Tiers). Le ticket Lesstime dit `false` par erreur — j'ai suivi la spec. - **Personas E2E « Admin » = `user-full`** : pas de persona métier « Admin » explicite dans `personas.ts` (personas techniques : `super-admin` bypass, `user-full` = toutes permissions). `user-full` est l'équivalent fonctionnel. - **`user-readonly` NON touché** : RG-1.01 dit « Admin uniquement », pas de pattern read-only spec'é au M0. À rouvrir dans un futur ticket si besoin. ## Validation - `make php-cs-fixer-allow-risky` ✓ (0 fichier corrigé) - `make db-reset` ✓ (sync-permissions : 11 codes en base, dont les 2 nouveaux `catalog.categories.*` vérifiés via `dbal:run-sql`) - `make test` ✓ (248 tests, 0 régression) - **RG-1.01 vérifiée manuellement** via curl : - Admin → 200 sur `GET /api/categories` et `GET /api/category_types` - Bob (zéro permission) → 403 sur `GET /api/categories`, `POST /api/categories`, `GET /api/category_types` - Anonyme → 401 sur `GET /api/categories`
malio changed target branch from feature/ERP-46-exposer-category-type-lecture-seule to develop 2026-05-28 09:45:09 +00:00
matthieu added 3 commits 2026-05-28 09:45:21 +00:00
- remplace build:dist (nuxt generate + prerender inutile en SPA) par nuxt build
- cache node_modules sur hash du lockfile, npm ci uniquement en cache miss
- regenere les types Nuxt (postinstall) en cache hit
- cache des artefacts .nuxt / Vite avec restore-keys pour eviter le build a froid
Les logs montrent que chaque operation actions/cache attend ~4m30 avant
ETIMEDOUT sur le serveur de cache du runner Gitea (51.91.78.99:39531) :
- cache: npm de setup-node = tout le 'Setup Node 22' (271s)
- cache node_modules et cache .nuxt : timeouts additionnels
- cache Composer cote backend : meme risque

Node 22 est deja dans le tool-cache (install instantane), npm ci a froid
~30s, build ~20s : le caching n'apportait rien ici. A re-activer si le
serveur de cache du runner est repare.
feat(catalog) : declare CatalogModule with RBAC permissions and sync 3 RBAC sources
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m12s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m9s
1d3b1c2881
- CatalogModule.php (REQUIRED=true) expose 2 permissions : catalog.categories.view + catalog.categories.manage
- modules.php : wire CatalogModule
- sidebar.php : item "Gestion des categories" dans la section Administration (gate sur catalog.categories.view)
- fr.json : cle sidebar.catalog.categories
- personas.ts : user-full recoit les 2 permissions, super-admin + ALL_ADMIN_LINKS etendus avec 'categories'
- SeedE2ECommand.php : miroir back, user-full recoit les 2 permissions

RG-1.01 verifiee manuellement (admin 200, bob 403, anonyme 401) sur /api/categories et /api/category_types.
matthieu force-pushed feature/ERP-47-declarer-module-catalog-rbac from 04336cc682 to 1d3b1c2881 2026-05-28 09:45:21 +00:00 Compare
malio merged commit fceb1e0e83 into develop 2026-05-28 09:45:34 +00:00
malio deleted branch feature/ERP-47-declarer-module-catalog-rbac 2026-05-28 09:45:35 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Starseed#19