Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| edc7b72a8f |
+37
-36
@@ -8114,35 +8114,33 @@ def register_csv():
|
||||
mimetype='application/pdf'
|
||||
)
|
||||
|
||||
|
||||
@app.route('/user_del', methods=['GET'])
|
||||
def user_del():
|
||||
"""
|
||||
User deletion interface.
|
||||
Displays a list of users that can be deleted by an administrator.
|
||||
Prevents self-deletion by hiding the current user from the list.
|
||||
|
||||
Returns:
|
||||
flask.Response: Rendered template with user list or redirect
|
||||
"""
|
||||
if 'username' not in session:
|
||||
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!', 'error')
|
||||
flash(
|
||||
'Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adresse zu nutzen. Bitte melden Sie sich an!',
|
||||
'error')
|
||||
return redirect(url_for('login'))
|
||||
|
||||
|
||||
# Abruf aller User (falls get_all_users tenant_id unterstützt, kann diese hier übergeben werden)
|
||||
all_users = us.get_all_users()
|
||||
|
||||
users_list = []
|
||||
for user in all_users:
|
||||
username = None
|
||||
for field in ['Username']:
|
||||
if field in user:
|
||||
username = user[field]
|
||||
break
|
||||
|
||||
if username and username != session['username']:
|
||||
username = user.get('Username')
|
||||
|
||||
if username and username != session.get('username'):
|
||||
try:
|
||||
permissions_payload = us.get_effective_permissions(username)
|
||||
except Exception:
|
||||
permissions_payload = us.build_default_permission_payload('standard_user')
|
||||
|
||||
try:
|
||||
name = us.get_name(username)
|
||||
last_name = us.get_last_name(username)
|
||||
@@ -8154,12 +8152,13 @@ def user_del():
|
||||
fullname = last_name
|
||||
else:
|
||||
fullname = None
|
||||
except:
|
||||
except Exception:
|
||||
name = ""
|
||||
last_name = ""
|
||||
fullname = None
|
||||
|
||||
users_list.append({
|
||||
'username': decrypt_text(username),
|
||||
'username': username, # Username ist plain in DB, kein decrypt_text() notwendig
|
||||
'admin': user.get('Admin', False),
|
||||
'fullname': fullname,
|
||||
'name': name,
|
||||
@@ -8168,7 +8167,7 @@ def user_del():
|
||||
'action_permissions': permissions_payload.get('actions', {}),
|
||||
'page_permissions': permissions_payload.get('pages', {}),
|
||||
})
|
||||
|
||||
|
||||
return render_template(
|
||||
'user_del.html',
|
||||
users=users_list,
|
||||
@@ -8183,61 +8182,63 @@ def delete_user():
|
||||
Process user deletion request.
|
||||
Deletes a specified user from the system.
|
||||
Includes safety checks to prevent self-deletion.
|
||||
|
||||
Returns:
|
||||
flask.Response: Redirect to the user deletion interface with status
|
||||
"""
|
||||
if 'username' not in session:
|
||||
flash('Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adrrese zu nutzen, versuchen sie es erneut nach dem sie sich mit einem berechtigten Nutzer angemeldet haben!', 'error')
|
||||
flash(
|
||||
'Ihnen ist es nicht gestattet auf dieser Internetanwendung, die eben besuchte Adresse zu nutzen. Bitte melden Sie sich an!',
|
||||
'error')
|
||||
return redirect(url_for('login'))
|
||||
|
||||
|
||||
username = request.form.get('username')
|
||||
if not username:
|
||||
flash('Kein Benutzer ausgewählt', 'error')
|
||||
return redirect(url_for('user_del'))
|
||||
|
||||
# Prevent self-deletion
|
||||
if username == session['username']:
|
||||
|
||||
if username == session.get('username'):
|
||||
flash('Sie können Ihr eigenes Konto nicht löschen', 'error')
|
||||
return redirect(url_for('user_del'))
|
||||
|
||||
# Reset this user's borrowings and free items before deleting the user
|
||||
|
||||
try:
|
||||
client = MongoClient(MONGODB_HOST, MONGODB_PORT)
|
||||
db = client[MONGODB_DB]
|
||||
client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT)
|
||||
tenant_id = session.get('tenant_id')
|
||||
db = _get_tenant_db(client, tenant_id)
|
||||
|
||||
ausleihungen = db['ausleihungen']
|
||||
items_col = db['items']
|
||||
now = datetime.datetime.now()
|
||||
|
||||
# Complete all active borrowings of this user
|
||||
# Aktive Ausleihen abschließen
|
||||
ausleihungen.update_many(
|
||||
{'User': username, 'Status': 'active'},
|
||||
{'$set': {'Status': 'completed', 'End': now, 'LastUpdated': now}}
|
||||
)
|
||||
|
||||
# Cancel all planned borrowings of this user
|
||||
# Geplante Ausleihen stornieren
|
||||
ausleihungen.update_many(
|
||||
{'User': username, 'Status': 'planned'},
|
||||
{'$set': {'Status': 'cancelled', 'LastUpdated': now}}
|
||||
)
|
||||
|
||||
# Free all items currently associated with this user
|
||||
# Inventar wieder verfügbar machen
|
||||
items_col.update_many(
|
||||
{'User': username},
|
||||
{'$set': {'Verfuegbar': True, 'LastUpdated': now}, '$unset': {'User': ""}}
|
||||
)
|
||||
|
||||
client.close()
|
||||
except Exception as e:
|
||||
app.logger.error(f"Error resetting borrowings for user {encrypt_text(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 for user {username}: {e}")
|
||||
flash(f'Warnung: Ausleihungen/Reservierungen für {username} konnten nicht vollständig zurückgesetzt werden',
|
||||
'warning')
|
||||
finally:
|
||||
# Garantiert, dass die Datenbankverbindung geschlossen wird
|
||||
if 'client' in locals():
|
||||
client.close()
|
||||
|
||||
# Delete the user
|
||||
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 {encrypt_text(username)}: {e}")
|
||||
app.logger.error(f"Error deleting user {username}: {e}")
|
||||
flash('Fehler beim Löschen des Benutzers', 'error')
|
||||
|
||||
return redirect(url_for('user_del'))
|
||||
|
||||
Reference in New Issue
Block a user