Files
geo/api/docs/CHK_USER_DELETE_PASS_INFO.md
Pierre 0687900564 fix: Récupérer l'opération active depuis la table operations
- Corrige l'erreur SQL 'Unknown column fk_operation in users'
- L'opération active est récupérée depuis operations.chk_active = 1
- Jointure avec users pour filtrer par entité de l'admin créateur
- Query: SELECT o.id FROM operations o INNER JOIN users u ON u.fk_entite = o.fk_entite WHERE u.id = ? AND o.chk_active = 1
2026-01-26 16:57:08 +01:00

138 lines
3.6 KiB
Markdown
Executable File

# 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