ClientRBACMatrixTest : matrice § 2.7 par role metier via les comptes demo seedes
par la commande reelle app:seed-rbac --with-demo-users (idempotente). Valide
200/403 par verbe et par onglet pour bureau / compta / commerciale / usine :
- usine : 403 partout ;
- bureau : view + manage, sans accounting ni archive ;
- compta : view + edition accounting (200), POST/main/information/archive -> 403 ;
- commerciale : view + manage, sans accounting ni archive ;
- RG-1.04 : POST Commerciale incomplet -> 422, meme POST par Admin -> 201.
- RG-1.04 durcie : pour une Commerciale, la completude de l'onglet Information est
exigee sur POST et sur tout PATCH, independamment des champs envoyes (suppression
de la condition d'intersection dans validateInformationCompleteness).
- Onglet Comptabilite editable par Compta : security du Patch /clients/{id} elargie
a `manage` OU `accounting.manage` ; nouveau guardManage (ClientProcessor, mode
strict RG-1.28) qui refuse a un porteur non-`manage` de modifier les onglets
principal / Information -> 403. Compta reste donc cantonne a la Comptabilite.
- Spec § 7 RG-1.04 amendee (+ consequence POST 422) + docblock du validator.
- Tests unitaires ClientProcessor : guardManage (Compta accounting-only -> 200,
champ metier -> 403) + RG-1.04 durcie hors onglet Information.
- RbacSeeder : source unique des 4 roles metier (bureau/compta/commerciale/usine),
de la matrice RBAC § 2.7 (role -> permissions) et des comptes demo. Operations
idempotentes et non destructives (ensureRoles / attachMatrix / ensureDemoUsers).
- app:seed-rbac : commande applicative presente en build prod (contrairement aux
fixtures require-dev). Sans option : roles + matrice. --with-demo-users +
--password / RBAC_DEMO_PASSWORD : un compte demo par role. Garde-fou : exit
non-zero + invite a lancer app:sync-permissions si les codes manquent.
- RbacDemoFixtures (dev/test) : appelle le meme seeder (DRY). La matrice est
attachee post-sync par app:seed-rbac (la table permission est purgee au load).
- makefile : etape seed-rbac apres sync-permissions (db-reset + test-db-setup).
- Doc deploiement (README) + credentials des comptes demo (CLAUDE.md / README).