Skip to content

Commit 3d9f944

Browse files
adminadmin
authored andcommitted
docs(front-ova): ajout du tableau complet des rôles et droits EIG basé sur l'analyse du code backend et frontend
1 parent 108713a commit 3d9f944

1 file changed

Lines changed: 127 additions & 1 deletion

File tree

doc_produit/front-ova/eig/role-et-droits-utilisateurs.md

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)