diff --git a/Web/app.py b/Web/app.py index db328c7..062b8a4 100755 --- a/Web/app.py +++ b/Web/app.py @@ -8180,13 +8180,11 @@ def user_del(): def delete_user(): """ Process user deletion request. - Deletes a specified user from the system. + Deletes a specified user from the system directly via the tenant db. Includes safety checks to prevent self-deletion. """ if 'username' not in session: - flash( - 'Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adresse zu nutzen. Bitte melden Sie sich an!', - 'error') + flash('Ihnen ist es nicht gestattet, diese Aktion auszuführen. Bitte melden Sie sich an!', 'error') return redirect(url_for('login')) username = request.form.get('username') @@ -8205,45 +8203,49 @@ def delete_user(): ausleihungen = db['ausleihungen'] items_col = db['items'] + users_col = db['users'] # Direkter Zugriff auf die User-Collection + now = datetime.datetime.now() - # Aktive Ausleihen abschließen + # 1. Aktive Ausleihen abschließen ausleihungen.update_many( {'User': username, 'Status': 'active'}, {'$set': {'Status': 'completed', 'End': now, 'LastUpdated': now}} ) - # Geplante Ausleihen stornieren + # 2. Geplante Ausleihen stornieren ausleihungen.update_many( {'User': username, 'Status': 'planned'}, {'$set': {'Status': 'cancelled', 'LastUpdated': now}} ) - # Inventar wieder verfügbar machen + # 3. Inventar wieder verfügbar machen items_col.update_many( {'User': username}, {'$set': {'Verfuegbar': True, 'LastUpdated': now}, '$unset': {'User': ""}} ) + + # 4. Den Benutzer direkt in der überprüften DB-Verbindung löschen + # Achte auf die exakte Großschreibung 'Username' (so wie in add_user definiert) + delete_result = users_col.delete_one({'Username': username}) + + # 5. Explizite Erfolgskontrolle + if delete_result.deleted_count > 0: + flash(f'Benutzer {username} erfolgreich gelöscht', 'success') + else: + # Fallback, falls der Nutzer nicht gefunden wurde (Fehlervermeidung) + flash(f'Löschen fehlgeschlagen: Benutzer {username} wurde in der Datenbank nicht gefunden.', 'error') + except Exception as e: - app.logger.error(f"Error resetting borrowings for user {username}: {e}") - flash(f'Warnung: Ausleihungen/Reservierungen für {username} konnten nicht vollständig zurückgesetzt werden', - 'warning') + app.logger.error(f"Error resetting borrowings or deleting user {username}: {e}") + flash('Kritischer Fehler beim Löschen des Benutzers', 'error') finally: - # Garantiert, dass die Datenbankverbindung geschlossen wird + # Garantiert, dass die DB-Verbindung geschlossen wird if 'client' in locals(): client.close() - try: - # us.delete_user muss ggf. noch angepasst werden, falls es auch den tenant_id verlangt - us.delete_user(username) - flash(f'Benutzer {username} erfolgreich gelöscht', 'success') - except Exception as e: - app.logger.error(f"Error deleting user {username}: {e}") - flash('Fehler beim Löschen des Benutzers', 'error') - return redirect(url_for('user_del')) - @app.route('/admin/borrowings') def admin_borrowings(): """