Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fb29fb91a9 | |||
| c3db2d9c6b |
+23
-21
@@ -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():
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user