feat(commercial) : RBAC fournisseurs (permissions + 3 sources + seed par rôle + sécurité référentiels) (ERP-90) (#69)
Auto Tag Develop / tag (push) Successful in 6s

ERP-90 — Étape 3/7 M2 fournisseurs (stack sur ERP-89).

## Périmètre
- **5 permissions** `commercial.suppliers.*` (view / manage / accounting.view / accounting.manage / archive) dans `CommercialModule::permissions()`.
- **3 sources RBAC synchronisées** (règle ABSOLUE n°8, même commit) :
  - `config/sidebar.php` — item `/suppliers` + `commercial.suppliers.view`
  - `frontend/tests/e2e/_fixtures/personas.ts` — persona `user-full`
  - `SeedE2ECommand.php` — miroir back
- **Assignation par rôle** dans `RbacSeeder::MATRIX` (§ 2.9, idempotent) :
  - Bureau : view + manage
  - Compta : view + accounting.view + accounting.manage
  - Commerciale : view + manage
  - Usine : aucune
  - archive : Admin seul
- **Sécurité des référentiels** (`tva_modes` / `payment_delays` / `payment_types` / `banks`) élargie : `view client OR view fournisseur` (§ 4.7).

## Vérifications
- `app:sync-permissions` (+5) et `app:seed-rbac --with-demo-users` (idempotent) OK
- `make test` : 499 tests verts
- `make php-cs-fixer-allow-risky` : 0 fix
- `make nuxt-test` : 234 tests verts

---------

Co-authored-by: Matthieu <contact@malio.fr>
Reviewed-on: #69
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
This commit was merged in pull request #69.
This commit is contained in:
2026-06-08 07:48:43 +00:00
committed by admin malio
parent 54091be60e
commit 58cbfe4437
9 changed files with 56 additions and 19 deletions
@@ -51,8 +51,9 @@ final class RbacSeeder
* Definition unique des 4 roles + matrice § 2.7. La cle est le code du role,
* `label` le libelle FR affichable, `permissions` la liste des codes RBAC a
* attacher (vide pour usine : aucun acces ; admin n'apparait pas car il
* bypass tout via isAdmin ; `commercial.clients.archive` n'est attache a
* aucun role metier — admin seul).
* bypass tout via isAdmin ; `commercial.clients.archive` et
* `commercial.suppliers.archive` ne sont attaches a aucun role metier —
* admin seul).
*
* @var array<string, array{label: string, permissions: list<string>}>
*/
@@ -62,6 +63,9 @@ final class RbacSeeder
'permissions' => [
'commercial.clients.view',
'commercial.clients.manage',
// Fournisseurs (M2 § 2.9, ERP-90) : view + manage (hors Comptabilite).
'commercial.suppliers.view',
'commercial.suppliers.manage',
// Lecture des referentiels transverses pour les selects client (ERP-102).
'catalog.categories.read_ref',
'sites.read_ref',
@@ -73,6 +77,11 @@ final class RbacSeeder
'commercial.clients.view',
'commercial.clients.accounting.view',
'commercial.clients.accounting.manage',
// Fournisseurs (M2 § 2.9, ERP-90) : view + onglet Comptabilite uniquement
// (pas de manage global -> ne peut pas creer un fournisseur).
'commercial.suppliers.view',
'commercial.suppliers.accounting.view',
'commercial.suppliers.accounting.manage',
// Lecture des referentiels transverses pour les selects client (ERP-102).
'catalog.categories.read_ref',
'sites.read_ref',
@@ -83,6 +92,10 @@ final class RbacSeeder
'permissions' => [
'commercial.clients.view',
'commercial.clients.manage',
// Fournisseurs (M2 § 2.9, ERP-90) : view + manage, sans accounting
// (onglet Comptabilite masque/filtre pour la Commerciale).
'commercial.suppliers.view',
'commercial.suppliers.manage',
// Lecture des referentiels transverses pour les selects client (ERP-102).
'catalog.categories.read_ref',
'sites.read_ref',