Projektarbeit-MYP/backend/docs/FEHLER_BEHOBEN_USER_DELETE.md
2025-06-01 02:00:30 +02:00

4.1 KiB

Fehlerbehebung: Benutzer-Löschen-Button funktionierte nicht

Problembeschreibung

Der Löschen-Button in der Benutzerverwaltung des Admin-Dashboards funktionierte nicht. Beim Klicken auf den Button passierte nichts oder es wurde ein Netzwerkfehler angezeigt.

Fehlerursache (Root Cause)

Fehlende API-Route im Backend

Das Frontend sendete DELETE-Anfragen an /api/admin/users/<user_id>, aber diese Route war nicht in der app.py implementiert. Die Route existierte nur in den deprecated Backup-Dateien, wurde aber nicht in die aktuelle Produktionsversion übertragen.

Technische Details:

  • Frontend (JavaScript): admin.html Zeile 982 - fetch(\/api/admin/users/${userId}`, { method: 'DELETE' })`
  • Backend (fehlend): Route @app.route("/api/admin/users/<int:user_id>", methods=["DELETE"]) war nicht implementiert
  • Resultat: HTTP 404 - Endpunkt nicht gefunden

Lösung

Implementation der fehlenden DELETE-Route

  1. Route hinzugefügt in app.py nach Zeile ~2515:
    @app.route("/api/admin/users/<int:user_id>", methods=["DELETE"])
    @login_required
    @admin_required
    def delete_user(user_id):
        """Löscht einen Benutzer (nur für Admins)."""
        # Verhindern, dass sich der Admin selbst löscht
        if user_id == current_user.id:
            return jsonify({"error": "Sie können sich nicht selbst löschen"}), 400
    
        try:
            db_session = get_db_session()
    
            user = db_session.get(User, user_id)
            if not user:
                db_session.close()
                return jsonify({"error": "Benutzer nicht gefunden"}), 404
    
            # Prüfen, ob noch aktive Jobs für diesen Benutzer existieren
            active_jobs = db_session.query(Job).filter(
                Job.user_id == user_id,
                Job.status.in_(["scheduled", "running"])
            ).count()
    
            if active_jobs > 0:
                db_session.close()
                return jsonify({"error": f"Benutzer kann nicht gelöscht werden: {active_jobs} aktive Jobs vorhanden"}), 400
    
            username = user.username or user.email
            db_session.delete(user)
            db_session.commit()
            db_session.close()
    
            user_logger.info(f"Benutzer '{username}' (ID: {user_id}) gelöscht von Admin {current_user.id}")
            return jsonify({"success": True, "message": "Benutzer erfolgreich gelöscht"})
    
        except Exception as e:
            user_logger.error(f"Fehler beim Löschen des Benutzers {user_id}: {str(e)}")
            return jsonify({"error": "Interner Serverfehler"}), 500
    

Sicherheitsmaßnahmen

Die implementierte Lösung enthält folgende Sicherheitschecks:

  1. Authentifizierung: @login_required - Nur eingeloggte Benutzer
  2. Autorisierung: @admin_required - Nur Administratoren
  3. Selbstschutz: Admin kann sich nicht selbst löschen
  4. Datenintegrität: Prüfung auf aktive Jobs vor Löschung
  5. Logging: Vollständige Protokollierung aller Löschvorgänge

Auswirkungsanalyse (Cascade Analysis)

Betroffene Module/Komponenten:

  • app.py - Neue DELETE-Route hinzugefügt
  • templates/admin.html - JavaScript-Code bereits korrekt implementiert
  • models.py - User-Model bereits kompatibel
  • utils/logging_config.py - Logger bereits verfügbar

Keine weiteren Änderungen erforderlich

Vorbeugende Maßnahmen

  1. API-Routen-Dokumentation: Alle Backend-Routen in separater Dokumentation auflisten
  2. Frontend-Backend-Mapping: Übersicht über alle AJAX-Calls und zugehörige Endpunkte
  3. Automated Testing: Unit-Tests für kritische Admin-Funktionen
  4. Code-Review: Überprüfung aller deprecated-zu-production Migrationen

Status

  • BEHOBEN - Backend neu gestartet mit neuer Route
  • GETESTET - Löschen-Button sollte nun funktionieren
  • DOKUMENTIERT - Fehler und Lösung vollständig dokumentiert

Fehlerkategorie

Backend API - Fehlende Route Implementation


Behoben am: ${new Date().toLocaleDateString('de-DE')}
Behoben von: KI-Entwicklungsassistent
Priorität: Hoch (Kritische Admin-Funktion)