Die Ursache wurde behoben: Die Ausleihungen speichern den Benutzer teilweise als Benutzer-ObjectId, während das Fenster „Meine Ausleihungen“ nur den Session-Benutzernamen verglichen hat. Dadurch wurden die Datensätze herausgefiltert.
Zusätzlich wurde die Item-Suche robuster gemacht: Vergleich gegen Benutzername Vergleich gegen Benutzer-ObjectId Vergleich gegen session['user_id'] Unterstützung für verschlüsselte und unverschlüsselte Benutzerwerte Unterstützung für Item-IDs als String und als MongoDB-ObjectId Geändert wurde: Web/app.py
This commit is contained in:
+25
-20
@@ -11510,6 +11510,13 @@ def my_borrowed_items():
|
||||
return redirect(url_for('login', next=request.path))
|
||||
|
||||
username = session['username']
|
||||
current_user = us.get_user(username) or {}
|
||||
user_ids = {
|
||||
username,
|
||||
str(current_user.get('_id')) if current_user.get('_id') else '',
|
||||
str(session.get('user_id') or ''),
|
||||
}
|
||||
user_ids.discard('')
|
||||
|
||||
client = MongoClient(MONGODB_HOST, MONGODB_PORT)
|
||||
db = client[MONGODB_DB]
|
||||
@@ -11526,31 +11533,27 @@ def my_borrowed_items():
|
||||
|
||||
for appointment in all_ausleihungen:
|
||||
raw_user = appointment.get('User', '')
|
||||
user_values = {str(raw_user).strip()} if raw_user else set()
|
||||
try:
|
||||
decrypted_user = decrypt_text(raw_user) if raw_user else ''
|
||||
except Exception as e:
|
||||
app.logger.error(f"Entschlüsselungsfehler: {e}")
|
||||
decrypted_user = ''
|
||||
if raw_user:
|
||||
user_values.add(str(decrypt_text(raw_user)).strip())
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if decrypted_user != username:
|
||||
if not user_values.intersection(user_ids):
|
||||
continue
|
||||
|
||||
item_id = appointment.get('Item')
|
||||
if not item_id:
|
||||
continue
|
||||
|
||||
try:
|
||||
if isinstance(item_id, str):
|
||||
query_id = ObjectId(item_id)
|
||||
else:
|
||||
query_id = item_id
|
||||
|
||||
item_obj = items_collection.find_one({
|
||||
'_id': query_id,
|
||||
'Deleted': {'$ne': True}
|
||||
})
|
||||
except Exception:
|
||||
item_obj = None
|
||||
item_queries = [{'_id': item_id}]
|
||||
if isinstance(item_id, str) and ObjectId.is_valid(item_id):
|
||||
item_queries.insert(0, {'_id': ObjectId(item_id)})
|
||||
item_obj = items_collection.find_one({
|
||||
'$or': item_queries,
|
||||
'Deleted': {'$ne': True}
|
||||
})
|
||||
|
||||
if item_obj:
|
||||
item_obj['_id'] = str(item_obj['_id'])
|
||||
@@ -11587,12 +11590,14 @@ def my_borrowed_items():
|
||||
|
||||
for item in all_borrowed_items:
|
||||
raw_item_user = item.get('User', '')
|
||||
item_user_values = {str(raw_item_user).strip()} if raw_item_user else set()
|
||||
try:
|
||||
dec_item_user = decrypt_text(raw_item_user) if raw_item_user else ''
|
||||
if raw_item_user:
|
||||
item_user_values.add(str(decrypt_text(raw_item_user)).strip())
|
||||
except Exception:
|
||||
dec_item_user = ''
|
||||
pass
|
||||
|
||||
if dec_item_user == username and str(item['_id']) not in processed_item_ids:
|
||||
if item_user_values.intersection(user_ids) and str(item['_id']) not in processed_item_ids:
|
||||
item['_id'] = str(item['_id'])
|
||||
item['ActiveAppointment'] = True
|
||||
item['AppointmentData'] = {'status': 'active (no document)'}
|
||||
|
||||
Reference in New Issue
Block a user