@@ -15,4 +15,130 @@ layout:
1515
1616# Rôle et droits utilisateurs
1717
18- à compléter.  ;
18+ ## Vue d'ensemble
19+
20+ Le système de gestion des Événements Indésirables Graves (EIG) implémente un modèle de permissions basé sur deux rôles principaux :
21+
22+ - ** EIG_LECTURE** : Accès en lecture seule
23+ - ** EIG_ECRITURE** : Accès complet (lecture + écriture)
24+
25+ ## Tableau des rôles et permissions
26+
27+ | Rôle | Code Backend | Code Frontend | Permissions | Actions autorisées |
28+ | ------| -------------| ---------------| -------------| -------------------|
29+ | ** Lecture seule** | ` Eig_Lecture ` | ` EIG_LECTURE ` | Consultation uniquement | • Consulter la liste des EIG<br >• Consulter un EIG détaillé<br >• Voir les statuts et types d'événements<br >• Accéder aux documents joints |
30+ | ** Lecture/Écriture** | ` Eig_Ecriture ` | ` EIG_ECRITURE ` | Accès complet | • Toutes les permissions de lecture<br >• Créer un nouvel EIG<br >• Modifier un EIG en statut BROUILLON<br >• Supprimer un EIG en statut BROUILLON<br >• Déposer un EIG (passage ENVOYE)<br >• Gérer les documents joints<br >• Attribuer des rôles EIG aux autres utilisateurs |
31+
32+ ## Contrôles d'accès par fonctionnalité
33+
34+ ### Frontend (Interface utilisateur)
35+
36+ | Fonctionnalité | EIG_LECTURE | EIG_ECRITURE | Contrôle |
37+ | ----------------| -------------| ---------------| ----------|
38+ | ** Menu de navigation** | ✅ Affiché | ✅ Affiché | Vérification des rôles dans ` useMenuNavItem.js ` |
39+ | ** Liste des EIG** | ✅ Accès | ✅ Accès | Middleware ` check-roles.js ` |
40+ | ** Consultation EIG** | ✅ Accès | ✅ Accès | Middleware ` check-roles.js ` |
41+ | ** Création EIG** | ❌ Bloqué | ✅ Accès | Vérification dans ` useMenuNavItem.js ` |
42+ | ** Modification EIG** | ❌ Bloqué | ✅ Si statut BROUILLON | ` eigStore.canModify ` |
43+ | ** Suppression EIG** | ❌ Bloqué | ✅ Si statut BROUILLON | ` canDelete() ` dans ` utils/eig.js ` |
44+ | ** Gestion des rôles** | ❌ Bloqué | ✅ Accès | ` canUpdateRole ` dans ` Compte.vue ` |
45+
46+ ### Backend (API)
47+
48+ | Endpoint | Méthode | EIG_LECTURE | EIG_ECRITURE | Middleware |
49+ | ----------| ---------| -------------| ---------------| ------------|
50+ | ` /eig/me ` | GET | ✅ | ✅ | ` checkPermissionEIG({ action: "READING" }) ` |
51+ | ` /eig ` | POST | ❌ | ✅ | ` checkPermissionEIG({ action: "CREATION" }) ` |
52+ | ` /eig/:id ` | PUT | ❌ | ✅ | ` checkPermissionEIG({ action: "MODIFICATION" }) ` |
53+ | ` /eig/:id ` | DELETE | ❌ | ✅ | ` checkPermissionEIG({ action: "DELETION" }) ` |
54+ | ` /eig/depose/:id ` | POST | ❌ | ✅ | ` checkPermissionEIG({ action: "MODIFICATION" }) ` |
55+ | ` /fo-user/roles/:userId ` | POST | ❌ | ✅ | ` checkPermissionFoRole({ role: "EIG_ECRITURE" }) ` |
56+
57+ ## Logique de contrôle des permissions
58+
59+ ### Backend (` checkPermissionEIG.js ` )
60+
61+ ``` javascript
62+ const ecriture = new Set ([
63+ actions .creation ,
64+ actions .modification ,
65+ actions .deletion ,
66+ actions .reading ,
67+ ]);
68+
69+ // Vérification des permissions
70+ return (
71+ (ecriture .has (action) && droits .some (d => d .label === roles .EIG_ECRITURE )) ||
72+ (action === actions .reading && droits .some (d => d .label === roles .EIG_LECTURE ))
73+ );
74+ ```
75+
76+ ### Frontend (` utils/eig.js ` )
77+
78+ ``` javascript
79+ const getEigPermissions = () => {
80+ const userStore = useUserStore ();
81+ const allowEigReadWrite = userStore .user ? .roles ? .includes (userRolesRef .EIG_ECRITURE );
82+ const allowEigReadOnly = userStore .user ? .roles ? .includes (userRolesRef .EIG_LECTURE );
83+ return { allowEigReadWrite, allowEigReadOnly };
84+ };
85+ ` ` `
86+
87+ ## Attribution automatique des rôles
88+
89+ ### Création d'organisme
90+
91+ Lors de la création d'un organisme, le premier utilisateur reçoit automatiquement le rôle ` EIG_ECRITURE ` :
92+
93+ ` ` ` javascript
94+ // Dans post.js (création organisme)
95+ if (type === " personne_physique" || parametre? .siegeSocial ) {
96+ await updateRoles (userId, [roles .EIG_ECRITURE ]);
97+ }
98+ ` ` `
99+
100+ ### Utilisateurs Back Office
101+
102+ Tous les utilisateurs du back office reçoivent automatiquement le rôle ` eig` :
103+
104+ ` ` ` javascript
105+ // Dans BoUser.js
106+ if (! roles .includes (" eig" )) {
107+ await pool .query (... query .bindRole (id, " eig" ));
108+ }
109+ ` ` `
110+
111+ ## Contrôles supplémentaires
112+
113+ ### Vérification d'organisme
114+
115+ Les utilisateurs ne peuvent accéder qu'aux EIG de leur organisme :
116+
117+ ` ` ` javascript
118+ // Vérification dans checkPermissionEIG.js
119+ const isAllowedOrganisme = await Eig .getIsUserAllowedOrganisme (userId, eigId);
120+ if (! isAllowedOrganisme) {
121+ throw new AppError (" Vous n'êtes pas autorisé à accéder à cet EIG pour cet organisme" );
122+ }
123+ ` ` `
124+
125+ ### Contrôle des statuts
126+
127+ - **Modification** : Uniquement possible si statut = ` BROUILLON `
128+ - **Suppression** : Uniquement possible si statut = ` BROUILLON `
129+ - **Dépôt** : Nécessite le rôle ` EIG_ECRITURE `
130+
131+ ## Messages d'erreur
132+
133+ | Situation | Message d'erreur | Code HTTP |
134+ |-----------|------------------|-----------|
135+ | Aucun rôle EIG | "Vous n'êtes pas autorisé à accéder aux EIG" | 403 |
136+ | Accès à un EIG d'un autre organisme | "Vous n'êtes pas autorisé à accéder à cet EIG pour cet organisme" | 403 |
137+ | Tentative de modification sans droits | "Vous n'êtes pas autorisé modifier les droits" | 403 |
138+
139+ ## Sécurité et traçabilité
140+
141+ - Toutes les actions sont tracées via le système de tracking
142+ - Les permissions sont vérifiées à chaque requête
143+ - Les contrôles sont appliqués côté frontend ET backend
144+ - Les erreurs d'accès sont loggées pour audit
0 commit comments