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
- 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:
- Authentifizierung:
@login_required
- Nur eingeloggte Benutzer - Autorisierung:
@admin_required
- Nur Administratoren - Selbstschutz: Admin kann sich nicht selbst löschen
- Datenintegrität: Prüfung auf aktive Jobs vor Löschung
- 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
- API-Routen-Dokumentation: Alle Backend-Routen in separater Dokumentation auflisten
- Frontend-Backend-Mapping: Übersicht über alle AJAX-Calls und zugehörige Endpunkte
- Automated Testing: Unit-Tests für kritische Admin-Funktionen
- 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)