- 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>
3.6 KiB
3.6 KiB
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_passTINYINT(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 :
{
"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 :
{
"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 :
{
"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 :
- Récupérer la valeur de
chk_user_delete_passdepuis la réponse login - Stocker cette valeur dans l'état de l'application
- Conditionner l'affichage du bouton de suppression selon cette valeur
Exemple Flutter :
// 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
- Valeur par défaut : Toujours
0(false) pour la sécurité - Modification : Seuls les administrateurs (fk_role > 1) peuvent modifier ce champ
- Rétrocompatibilité : Les entités existantes ont la valeur
0par défaut - 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) :
- Ajout du champ en base de données
- Modification EntiteController (create, update, get)
- Modification LoginController (réponse login)
- 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