Compare commits

...

2 Commits

Author SHA1 Message Date
Aiirondev_dev fb29fb91a9 Fix for the delete user function
Release Inventarsystem / release-docker (push) Successful in 2m27s
2026-08-12 16:34:01 +02:00
Aiirondev_dev c3db2d9c6b Fix for the delete user function
Release Inventarsystem / release-docker (push) Successful in 2m16s
2026-08-12 16:31:17 +02:00
+23 -21
View File
@@ -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')
@@ -8201,49 +8199,53 @@ def delete_user():
try:
client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT)
tenant_id = session.get('tenant_id')
db = _get_tenant_db(client, tenant_id)
db = us._get_tenant_db(client, tenant_id)
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():
"""