# 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