[DTP-Worker] Sprint 2 · ERPNext RBAC 50 rôles (schéma + data + spec + gate)
Livrable Sprint 2 (roadmap §S2 l.38 « RBAC 50 rôles configuration », GAP_ANALYSIS §3.4). Seul deliverable S2 100% autorable en-repo — les clones Frontend/CRM dépendent des layouts LIVE (VPS). - rbac/rbac.schema.json — contrat JSON-Schema draft-07 (sous-ensemble validateur maison, zéro pip) : 50 rôles, DocPerm par DocType, scope User Permission. - rbac/rbac_50_roles.json — 50 rôles × 5 portails métier + console plateforme, mappés aux entités CLAUDE.md, ciblant des DocTypes ERPNext v15 natifs. - rbac/RBAC_50_ROLES_SPEC.md — design RBAC 3 niveaux + séparation des pouvoirs + procédure d'application VPS (fixtures bench, hors périmètre worker). - rbac/tests/test_rbac.py — 10 tests unittest (réutilise le validateur Publiciste, pas de doublon) : 50 rôles exacts, unicité, 5 portails, anti- élévation de privilège. Oracle jsonschema si présent. - ci.yml — job rbac-tests ajouté au gate (Gitea Actions uniquement). - GAP_ANALYSIS §3.4 + daily report 2026-07-30 (session 4) mis à jour. Anti-invention #6 : aucun plafond monétaire inventé ; DocTypes non natifs marqués custom → à confirmer VPS. Gate local vert (guard/json/docs + 10 tests RBAC + 23 tests Publiciste régression). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# Spec RBAC · 50 rôles · OTO Enterprise OS DTP
|
||||
|
||||
> **Livrable Sprint 2 · ERPNext Backend** (roadmap
|
||||
> [`../../04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md`](../../04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md)
|
||||
> §Sprint 2 l.38 : _« ERPNext Backend : RBAC 50 rôles configuration »_ ·
|
||||
> [`../GAP_ANALYSIS_SPRINT1.md`](../GAP_ANALYSIS_SPRINT1.md) §3.4 gap ERPNext).
|
||||
>
|
||||
> **Date** : 2026-07-30 · **Auteur** : Claude Code DTP Worker · **Version** : 1.0.0
|
||||
|
||||
---
|
||||
|
||||
## 1. Objet
|
||||
|
||||
Design **machine-lisible** des **50 rôles RBAC** (contrainte CLAUDE.md « RBAC 50 rôles »)
|
||||
à créer nativement dans Frappe/ERPNext v15. Le contrat de données est
|
||||
[`rbac.schema.json`](rbac.schema.json) ; les données sont
|
||||
[`rbac_50_roles.json`](rbac_50_roles.json). Ce document ne touche **jamais la
|
||||
production** : il définit la **cible** que l'agent ERPNext Backend appliquera sur
|
||||
le VPS via `bench` / fixtures (voir §7).
|
||||
|
||||
**Priorité ERPNext natif** (contrainte #1) : chaque rôle est un DocType `Role`
|
||||
Frappe standard — **aucun** RBAC externe.
|
||||
**CRM = ERPNext natif** (jamais EspoCRM ni HubSpot — contrainte #3).
|
||||
|
||||
## 2. Modèle RBAC
|
||||
|
||||
Le RBAC Frappe combine trois niveaux, tous couverts par le schéma :
|
||||
|
||||
| Niveau Frappe | Champ du schéma | Rôle |
|
||||
|---|---|---|
|
||||
| **Role** (DocType) | `erpnext_role_name` | Un DocType `Role` par ligne, préfixe `OTO ` (anti-collision natif). |
|
||||
| **Permissions par DocType** | `permissions_cibles[]` | Verbes Frappe (`read`/`write`/`create`/`submit`/`cancel`/`report`/…) par DocType. |
|
||||
| **Row-level** (User Permission) | `scope_donnees` | `own` · `equipe` · `entite` (Company) · `groupe` (consolidé). |
|
||||
|
||||
**Défense en profondeur** : le pouvoir `set_user_permissions` (gestion des
|
||||
habilitations) est **réservé** au seul rôle `OTO Plateforme RBAC Admin`
|
||||
(`scope_donnees = groupe`, `famille = plateforme`) — séparation des pouvoirs
|
||||
vérifiée par test automatisé.
|
||||
|
||||
## 3. Cartographie portails ↔ familles
|
||||
|
||||
Les **5 portails métier** (roadmap Sprint 4 « 5 portails rôle ») + **1 console
|
||||
technique transversale** (`plateforme`, hors du compte de 5) :
|
||||
|
||||
| Portail | Familles rattachées | Nb rôles |
|
||||
|---|---|---|
|
||||
| **direction** | direction, finance (CFO), faisabilite (analyste), legal | 10 |
|
||||
| **ventes** | ventes, marketing | 12 |
|
||||
| **construction** | construction, faisabilite (rendu/IFC/économiste) | 10 |
|
||||
| **achat** | achat | 5 |
|
||||
| **compta** | finance | 8 |
|
||||
| **plateforme** _(technique)_ | plateforme | 5 |
|
||||
| | **Total** | **50** |
|
||||
|
||||
> Répartition indicative issue de `rbac_50_roles.json` ; la source de vérité reste
|
||||
> le JSON (le test impose exactement 50 rôles et la couverture des 5 portails).
|
||||
|
||||
## 4. Cartographie rôles ↔ entités (CLAUDE.md §Entités)
|
||||
|
||||
Chaque rôle porte une `entite_principale`. « Groupe » = périmètre consolidé
|
||||
transversal (direction, contrôle de gestion, audit UAF, BI).
|
||||
|
||||
| Entité | Exemples de rôles |
|
||||
|---|---|
|
||||
| **WAF** (holding) | Président, Directeur Juridique, Agent ONAPI |
|
||||
| **WA SRL** | Contrats de vente, Achats, Comptable général, Fiscaliste e-CF, Analyste faisabilité |
|
||||
| **AC Arias Cuevas** | Directeur/Chef de projet Construction, Ingénieur, Économiste, Magasinier |
|
||||
| **Consortium ECR DR** (paymaster RH) | Gestionnaire Paie |
|
||||
| **Helios RD** (marque publique) | Directeur des Ventes, Conseiller, Marketing, Comptable clients AR |
|
||||
| **Ploutos** (patrimoine/monétaire) | Trésorier |
|
||||
| **9060 QC** (World Activities Cdn.) | DevOps, RBAC Admin, QA, OTOIA, Mobile |
|
||||
| **Groupe** (consolidé) | DG, CFO, COO, CCO, Conseil, Contrôle de gestion, Audit UAF, BI |
|
||||
|
||||
## 5. Les 50 rôles (résumé)
|
||||
|
||||
> Détail complet (permissions par DocType, modules, scope) dans
|
||||
> [`rbac_50_roles.json`](rbac_50_roles.json).
|
||||
|
||||
**Direction / Gouvernance (6)** — Président WAF · Directeur Général · CFO · COO ·
|
||||
CCO · Conseil d'Administration (lecture).
|
||||
|
||||
**Ventes (8)** — Directeur des Ventes · Chef d'Équipe · Conseiller · Courtier
|
||||
externe · Coordinateur Réservations · Gestionnaire Contrats · Coordinateur
|
||||
CONFOTUR · Support Après-Vente.
|
||||
|
||||
**Marketing (4)** — Directeur Marketing · Publiciste (agent) · SEO · Social.
|
||||
|
||||
**Construction (7)** — Directeur · Chef de Projet · Ingénieur · Architecte ·
|
||||
QA/QC · Coordinateur BIM · Superviseur Sous-traitants.
|
||||
|
||||
**Achat (5)** — Directeur · Acheteur · Gestionnaire Fournisseurs · Magasinier ·
|
||||
Contrôleur Réception.
|
||||
|
||||
**Finance / Compta (8)** — Contrôleur de Gestion · Comptable Général · AP · AR ·
|
||||
Trésorier (Ploutos) · Paie (Consortium ECR DR) · Fiscaliste e-CF · Audit UAF.
|
||||
|
||||
**Faisabilité / AEC (4)** — Analyste Faisabilité · Rendu 3D · IFC/Speckle ·
|
||||
Économiste de la Construction.
|
||||
|
||||
**Legal (2)** — Directeur Juridique · Agent ONAPI.
|
||||
|
||||
**Plateforme technique (6)** — DevOps · RBAC Admin · QA · OTOIA (système) ·
|
||||
Mobile · BI.
|
||||
|
||||
_(6+8+4+7+5+8+4+2+6 = 50.)_
|
||||
|
||||
## 6. Conformité aux contraintes CLAUDE.md
|
||||
|
||||
| # | Contrainte | Application ici |
|
||||
|---|---|---|
|
||||
| 1 | ERPNext natif prioritaire | 100 % DocType `Role` Frappe, aucun RBAC externe. |
|
||||
| 3 | CRM = ERPNext natif | Rôles ventes → `Lead`/`Opportunity`/`Quotation`/`Customer` natifs. |
|
||||
| 6 | Zéro invention | Aucun chiffre/plafond monétaire inventé ; seuls rôles, entités et DocTypes natifs (+ DocTypes DTP marqués `custom` à confirmer VPS). |
|
||||
| 8 | VPS pour tous projets | Application des fixtures = VPS (§7), jamais local. |
|
||||
| — | Séparation des pouvoirs | `set_user_permissions` réservé au RBAC Admin (test). |
|
||||
|
||||
**DocTypes `custom: true`** (`Faisabilité`, `Publiciste Log`, `CONFOTUR
|
||||
Application`, `API Access`) = DocTypes DTP **à créer** — existence **à confirmer
|
||||
VPS** par l'agent ERPNext avant application (cohérent avec l'interdit « documenter
|
||||
du code sans vérifier l'existence courante »).
|
||||
|
||||
## 7. Application sur VPS (hors périmètre worker)
|
||||
|
||||
Ce worker n'écrit **jamais** sur le VPS. L'agent ERPNext Backend appliquera la
|
||||
cible côté serveur (`erpnext-backend-1`) :
|
||||
|
||||
1. Générer les fixtures `Role` + `Custom DocPerm` depuis `rbac_50_roles.json`.
|
||||
2. `bench --site frontend migrate` pour installer les rôles.
|
||||
3. Créer les DocTypes DTP `custom` manquants (§6) **après** confirmation.
|
||||
4. Mapper les `scope_donnees` en `User Permission` par utilisateur.
|
||||
5. Vérification HTTP post-déploiement (workflow #3) + audit QA 4Big.
|
||||
|
||||
> Un **générateur de fixtures** `rbac_50_roles.json → fixtures/` est le prochain
|
||||
> incrément (branchable sur le même patron que le Publiciste) ; il reste autorable
|
||||
> en-repo sans toucher au VPS.
|
||||
|
||||
## 8. Vérification (en-repo, sans toucher au VPS)
|
||||
|
||||
- `python3 -m unittest discover -s tests -v` → **10/10 verts** (schéma maison +
|
||||
oracle `jsonschema`, 50 rôles, unicité, couverture 5 portails, séparation des
|
||||
pouvoirs).
|
||||
- `rbac_50_roles.json` : JSON strict valide (couvert par `ci/validate_json.sh`).
|
||||
- Job CI dédié `rbac-tests` ajouté au **gate** (`.gitea/workflows/ci.yml`,
|
||||
Gitea Actions uniquement · #2).
|
||||
|
||||
## 9. Auto-score 4Big du livrable : **95/100**
|
||||
|
||||
_Réserve −5_ : application des fixtures + création des DocTypes `custom` +
|
||||
mapping `User Permission` = côté VPS (agent ERPNext, hors périmètre worker) ;
|
||||
plafonds d'approbation monétaires par rôle volontairement **non chiffrés** ici
|
||||
(anti-invention #6 — à définir avec la Direction sur pièces). Validé statiquement
|
||||
en-repo (10 tests verts + schéma conforme + gate CI).
|
||||
Reference in New Issue
Block a user