feat: Release v3.1.6 - Amélioration complète des flux de passages
- Optimisation des listes de passages (user/admin) - Amélioration du flux de création avec validation temps réel - Amélioration du flux de consultation avec export multi-formats - Amélioration du flux de modification avec suivi des changements - Ajout de la génération PDF pour les reçus - Migration de la structure des uploads - Implémentation de la file d'attente d'emails - Ajout des permissions de suppression de passages - Corrections de bugs et optimisations performances 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
138
api/docs/CHK_USER_DELETE_PASS_INFO.md
Normal file
138
api/docs/CHK_USER_DELETE_PASS_INFO.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Gestion du champ chk_user_delete_pass
|
||||
|
||||
## 📋 Description
|
||||
Le champ `chk_user_delete_pass` permet de contrôler si les membres d'une amicale peuvent supprimer des passages.
|
||||
|
||||
## 🔄 Modifications API
|
||||
|
||||
### 1. Base de données
|
||||
- **Table** : `entites`
|
||||
- **Champ** : `chk_user_delete_pass` TINYINT(1) DEFAULT 0
|
||||
- **Valeurs** :
|
||||
- `0` : Les membres NE peuvent PAS supprimer de passages (par défaut)
|
||||
- `1` : Les membres PEUVENT supprimer des passages
|
||||
|
||||
### 2. Endpoints modifiés
|
||||
|
||||
#### POST /api/entites (Création)
|
||||
- Le champ est automatiquement initialisé à `0` (false) lors de la création
|
||||
- Non modifiable à la création
|
||||
|
||||
#### PUT /api/entites/{id} (Modification)
|
||||
**Entrée JSON :**
|
||||
```json
|
||||
{
|
||||
"chk_user_delete_pass": 1
|
||||
}
|
||||
```
|
||||
- **Type** : Boolean (0 ou 1)
|
||||
- **Obligatoire** : Non
|
||||
- **Accès** : Administrateurs uniquement (fk_role > 1)
|
||||
|
||||
#### GET /api/entites/{id} (Récupération)
|
||||
**Sortie JSON :**
|
||||
```json
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Amicale de Pompiers",
|
||||
"code_postal": "75001",
|
||||
"ville": "Paris",
|
||||
"chk_active": 1,
|
||||
"chk_user_delete_pass": 0
|
||||
}
|
||||
```
|
||||
|
||||
#### GET /api/entites (Liste)
|
||||
Retourne `chk_user_delete_pass` pour chaque entité dans la liste.
|
||||
|
||||
### 3. Route /api/login
|
||||
Le champ `chk_user_delete_pass` est maintenant inclus dans la réponse de login dans les objets `amicale` :
|
||||
|
||||
**Réponse JSON :**
|
||||
```json
|
||||
{
|
||||
"user": { ... },
|
||||
"amicale": {
|
||||
"id": 5,
|
||||
"name": "Amicale de Pompiers",
|
||||
"code_postal": "75001",
|
||||
"ville": "Paris",
|
||||
"chk_demo": 0,
|
||||
"chk_mdp_manuel": 0,
|
||||
"chk_username_manuel": 0,
|
||||
"chk_copie_mail_recu": 0,
|
||||
"chk_accept_sms": 0,
|
||||
"chk_active": 1,
|
||||
"chk_stripe": 0,
|
||||
"chk_user_delete_pass": 0 // ← NOUVEAU CHAMP
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🎯 Utilisation côté client
|
||||
|
||||
### Flutter/Web
|
||||
Le client doit :
|
||||
1. **Récupérer** la valeur de `chk_user_delete_pass` depuis la réponse login
|
||||
2. **Stocker** cette valeur dans l'état de l'application
|
||||
3. **Conditionner** l'affichage du bouton de suppression selon cette valeur
|
||||
|
||||
**Exemple Flutter :**
|
||||
```dart
|
||||
// Dans le modèle Amicale
|
||||
class Amicale {
|
||||
final int id;
|
||||
final String name;
|
||||
final bool chkUserDeletePass; // Nouveau champ
|
||||
|
||||
bool get canUserDeletePassage => chkUserDeletePass;
|
||||
}
|
||||
|
||||
// Dans l'UI
|
||||
if (amicale.canUserDeletePassage) {
|
||||
// Afficher le bouton de suppression
|
||||
IconButton(
|
||||
icon: Icon(Icons.delete),
|
||||
onPressed: () => deletePassage(passageId),
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ Points importants
|
||||
|
||||
1. **Valeur par défaut** : Toujours `0` (false) pour la sécurité
|
||||
2. **Modification** : Seuls les administrateurs (fk_role > 1) peuvent modifier ce champ
|
||||
3. **Rétrocompatibilité** : Les entités existantes ont la valeur `0` par défaut
|
||||
4. **Validation côté serveur** : L'API vérifiera également ce droit lors de la tentative de suppression
|
||||
|
||||
## 📝 Script SQL
|
||||
Le script de migration est disponible dans :
|
||||
```
|
||||
/scripts/sql/add_chk_user_delete_pass.sql
|
||||
```
|
||||
|
||||
## ✅ Checklist d'implémentation
|
||||
|
||||
### Côté API (déjà fait) :
|
||||
- [x] Ajout du champ en base de données
|
||||
- [x] Modification EntiteController (create, update, get)
|
||||
- [x] Modification LoginController (réponse login)
|
||||
- [x] Script SQL de migration
|
||||
|
||||
### Côté Client (à faire) :
|
||||
- [ ] Ajouter le champ dans le modèle Amicale
|
||||
- [ ] Parser le champ depuis la réponse login
|
||||
- [ ] Stocker dans l'état de l'application
|
||||
- [ ] Conditionner l'affichage du bouton suppression
|
||||
- [ ] Tester avec des valeurs 0 et 1
|
||||
|
||||
## 🔒 Sécurité
|
||||
Même si `chk_user_delete_pass = 1`, l'API devra vérifier :
|
||||
- L'authentification de l'utilisateur
|
||||
- L'appartenance à l'entité
|
||||
- Le droit de suppression sur le passage spécifique
|
||||
- Les règles métier (ex: pas de suppression après export)
|
||||
|
||||
---
|
||||
**Date :** 20/08/2025
|
||||
**Version API :** 3.1.4
|
||||
Reference in New Issue
Block a user