This commit is contained in:
+37
-36
@@ -8114,35 +8114,33 @@ def register_csv():
|
|||||||
mimetype='application/pdf'
|
mimetype='application/pdf'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/user_del', methods=['GET'])
|
@app.route('/user_del', methods=['GET'])
|
||||||
def user_del():
|
def user_del():
|
||||||
"""
|
"""
|
||||||
User deletion interface.
|
User deletion interface.
|
||||||
Displays a list of users that can be deleted by an administrator.
|
Displays a list of users that can be deleted by an administrator.
|
||||||
Prevents self-deletion by hiding the current user from the list.
|
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:
|
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'))
|
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()
|
all_users = us.get_all_users()
|
||||||
|
|
||||||
users_list = []
|
users_list = []
|
||||||
for user in all_users:
|
for user in all_users:
|
||||||
username = None
|
username = user.get('Username')
|
||||||
for field in ['Username']:
|
|
||||||
if field in user:
|
if username and username != session.get('username'):
|
||||||
username = user[field]
|
|
||||||
break
|
|
||||||
|
|
||||||
if username and username != session['username']:
|
|
||||||
try:
|
try:
|
||||||
permissions_payload = us.get_effective_permissions(username)
|
permissions_payload = us.get_effective_permissions(username)
|
||||||
except Exception:
|
except Exception:
|
||||||
permissions_payload = us.build_default_permission_payload('standard_user')
|
permissions_payload = us.build_default_permission_payload('standard_user')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
name = us.get_name(username)
|
name = us.get_name(username)
|
||||||
last_name = us.get_last_name(username)
|
last_name = us.get_last_name(username)
|
||||||
@@ -8154,12 +8152,13 @@ def user_del():
|
|||||||
fullname = last_name
|
fullname = last_name
|
||||||
else:
|
else:
|
||||||
fullname = None
|
fullname = None
|
||||||
except:
|
except Exception:
|
||||||
name = ""
|
name = ""
|
||||||
last_name = ""
|
last_name = ""
|
||||||
fullname = None
|
fullname = None
|
||||||
|
|
||||||
users_list.append({
|
users_list.append({
|
||||||
'username': decrypt_text(username),
|
'username': username, # Username ist plain in DB, kein decrypt_text() notwendig
|
||||||
'admin': user.get('Admin', False),
|
'admin': user.get('Admin', False),
|
||||||
'fullname': fullname,
|
'fullname': fullname,
|
||||||
'name': name,
|
'name': name,
|
||||||
@@ -8168,7 +8167,7 @@ def user_del():
|
|||||||
'action_permissions': permissions_payload.get('actions', {}),
|
'action_permissions': permissions_payload.get('actions', {}),
|
||||||
'page_permissions': permissions_payload.get('pages', {}),
|
'page_permissions': permissions_payload.get('pages', {}),
|
||||||
})
|
})
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'user_del.html',
|
'user_del.html',
|
||||||
users=users_list,
|
users=users_list,
|
||||||
@@ -8183,61 +8182,63 @@ def delete_user():
|
|||||||
Process user deletion request.
|
Process user deletion request.
|
||||||
Deletes a specified user from the system.
|
Deletes a specified user from the system.
|
||||||
Includes safety checks to prevent self-deletion.
|
Includes safety checks to prevent self-deletion.
|
||||||
|
|
||||||
Returns:
|
|
||||||
flask.Response: Redirect to the user deletion interface with status
|
|
||||||
"""
|
"""
|
||||||
if 'username' not in session:
|
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'))
|
return redirect(url_for('login'))
|
||||||
|
|
||||||
username = request.form.get('username')
|
username = request.form.get('username')
|
||||||
if not username:
|
if not username:
|
||||||
flash('Kein Benutzer ausgewählt', 'error')
|
flash('Kein Benutzer ausgewählt', 'error')
|
||||||
return redirect(url_for('user_del'))
|
return redirect(url_for('user_del'))
|
||||||
|
|
||||||
# Prevent self-deletion
|
if username == session.get('username'):
|
||||||
if username == session['username']:
|
|
||||||
flash('Sie können Ihr eigenes Konto nicht löschen', 'error')
|
flash('Sie können Ihr eigenes Konto nicht löschen', 'error')
|
||||||
return redirect(url_for('user_del'))
|
return redirect(url_for('user_del'))
|
||||||
|
|
||||||
# Reset this user's borrowings and free items before deleting the user
|
|
||||||
try:
|
try:
|
||||||
client = MongoClient(MONGODB_HOST, MONGODB_PORT)
|
client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT)
|
||||||
db = client[MONGODB_DB]
|
tenant_id = session.get('tenant_id')
|
||||||
|
db = _get_tenant_db(client, tenant_id)
|
||||||
|
|
||||||
ausleihungen = db['ausleihungen']
|
ausleihungen = db['ausleihungen']
|
||||||
items_col = db['items']
|
items_col = db['items']
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
|
|
||||||
# Complete all active borrowings of this user
|
# Aktive Ausleihen abschließen
|
||||||
ausleihungen.update_many(
|
ausleihungen.update_many(
|
||||||
{'User': username, 'Status': 'active'},
|
{'User': username, 'Status': 'active'},
|
||||||
{'$set': {'Status': 'completed', 'End': now, 'LastUpdated': now}}
|
{'$set': {'Status': 'completed', 'End': now, 'LastUpdated': now}}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Cancel all planned borrowings of this user
|
# Geplante Ausleihen stornieren
|
||||||
ausleihungen.update_many(
|
ausleihungen.update_many(
|
||||||
{'User': username, 'Status': 'planned'},
|
{'User': username, 'Status': 'planned'},
|
||||||
{'$set': {'Status': 'cancelled', 'LastUpdated': now}}
|
{'$set': {'Status': 'cancelled', 'LastUpdated': now}}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Free all items currently associated with this user
|
# Inventar wieder verfügbar machen
|
||||||
items_col.update_many(
|
items_col.update_many(
|
||||||
{'User': username},
|
{'User': username},
|
||||||
{'$set': {'Verfuegbar': True, 'LastUpdated': now}, '$unset': {'User': ""}}
|
{'$set': {'Verfuegbar': True, 'LastUpdated': now}, '$unset': {'User': ""}}
|
||||||
)
|
)
|
||||||
|
|
||||||
client.close()
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
app.logger.error(f"Error resetting borrowings for user {encrypt_text(username)}: {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')
|
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:
|
try:
|
||||||
|
# us.delete_user muss ggf. noch angepasst werden, falls es auch den tenant_id verlangt
|
||||||
us.delete_user(username)
|
us.delete_user(username)
|
||||||
flash(f'Benutzer {username} erfolgreich gelöscht', 'success')
|
flash(f'Benutzer {username} erfolgreich gelöscht', 'success')
|
||||||
except Exception as e:
|
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')
|
flash('Fehler beim Löschen des Benutzers', 'error')
|
||||||
|
|
||||||
return redirect(url_for('user_del'))
|
return redirect(url_for('user_del'))
|
||||||
|
|||||||
Reference in New Issue
Block a user