# 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