# API DELETE /passages/{id} - Documentation des permissions ## 📋 Endpoint ``` DELETE /api/passages/{id} ``` ## 🔒 Authentification - **Requise** : OUI (Bearer token) - **Session** : Doit ĂȘtre valide ## 📊 Logique de permissions ### RĂšgles par rĂŽle : | fk_role | Description | Peut supprimer ? | Conditions | |---------|------------|------------------|------------| | 1 | Membre | ✅ Conditionnel | Si `entites.chk_user_delete_pass = 1` | | 2 | Admin amicale | ✅ OUI | Toujours autorisĂ© | | 3+ | Super admin | ✅ OUI | Toujours autorisĂ© | ### DĂ©tail du contrĂŽle pour les membres (fk_role = 1) : ```sql -- L'API vĂ©rifie : SELECT chk_user_delete_pass FROM entites WHERE id = {user.fk_entite} -- Si chk_user_delete_pass = 0 → Erreur 403 -- Si chk_user_delete_pass = 1 → Continue ``` ## 🔄 Flux de vĂ©rification ```mermaid graph TD A[DELETE /passages/{id}] --> B{Utilisateur authentifiĂ© ?} B -->|Non| C[Erreur 401] B -->|Oui| D{RĂ©cupĂ©rer fk_role} D --> E{fk_role = 1 ?} E -->|Non| F[AutorisĂ© - Admin] E -->|Oui| G{VĂ©rifier chk_user_delete_pass} G -->|= 0| H[Erreur 403 - Non autorisĂ©] G -->|= 1| F F --> I{Passage existe ?} I -->|Non| J[Erreur 404] I -->|Oui| K{Passage appartient Ă  l'entitĂ© ?} K -->|Non| L[Erreur 404] K -->|Oui| M[Soft delete : chk_active = 0] M --> N[SuccĂšs 200] ``` ## 📝 RĂ©ponses ### ✅ SuccĂšs (200) ```json { "status": "success", "message": "Passage supprimĂ© avec succĂšs" } ``` ### ❌ Erreur 401 - Non authentifiĂ© ```json { "status": "error", "message": "Vous devez ĂȘtre connectĂ© pour effectuer cette action" } ``` ### ❌ Erreur 403 - Permission refusĂ©e (membre sans autorisation) ```json { "status": "error", "message": "Vous n'avez pas l'autorisation de supprimer des passages" } ``` ### ❌ Erreur 404 - Passage non trouvĂ© ```json { "status": "error", "message": "Passage non trouvĂ©" } ``` ## 📊 Logging L'API enregistre : ### En cas de tentative non autorisĂ©e : ```php LogService::log('Tentative de suppression de passage non autorisĂ©e', [ 'level' => 'warning', 'userId' => $userId, 'userRole' => $userRole, 'entiteId' => $entiteId, 'passageId' => $passageId, 'chk_user_delete_pass' => 0 ]); ``` ### En cas de succĂšs : ```php LogService::log('Suppression d\'un passage', [ 'level' => 'info', 'userId' => $userId, 'passageId' => $passageId ]); ``` ## 🎯 Exemple d'utilisation ### RequĂȘte ```bash curl -X DELETE https://api.geosector.fr/api/passages/19500576 \ -H "Authorization: Bearer {session_token}" \ -H "Content-Type: application/json" ``` ### ScĂ©narios #### ScĂ©nario 1 : Membre avec permission ✅ - Utilisateur : fk_role = 1 - EntitĂ© : chk_user_delete_pass = 1 - **RĂ©sultat** : Suppression autorisĂ©e #### ScĂ©nario 2 : Membre sans permission ❌ - Utilisateur : fk_role = 1 - EntitĂ© : chk_user_delete_pass = 0 - **RĂ©sultat** : Erreur 403 #### ScĂ©nario 3 : Admin amicale ✅ - Utilisateur : fk_role = 2 - **RĂ©sultat** : Suppression autorisĂ©e (pas de vĂ©rification chk_user_delete_pass) ## ⚠ Notes importantes 1. **Soft delete** : Le passage n'est pas supprimĂ© physiquement, seulement `chk_active = 0` 2. **TraçabilitĂ©** : `updated_at` et `fk_user_modif` sont mis Ă  jour 3. **ContrĂŽle entitĂ©** : Un utilisateur ne peut supprimer que les passages de son entitĂ© 4. **Log warning** : Toute tentative non autorisĂ©e est loggĂ©e en niveau WARNING ## 🔧 Configuration cĂŽtĂ© amicale Pour autoriser les membres Ă  supprimer des passages : ```sql UPDATE entites SET chk_user_delete_pass = 1 WHERE id = {entite_id}; ``` Cette modification ne peut ĂȘtre faite que par un administrateur (fk_role > 1) via l'endpoint : ``` PUT /api/entites/{id} { "chk_user_delete_pass": 1 } ``` --- **Version API** : 3.1.4 **Date** : 20/08/2025