Impersonation system implementation

This commit is contained in:
JakeBreath
2026-08-03 21:33:31 -05:00
parent 87b0d46232
commit 95acc9b8d2
12 changed files with 545 additions and 8 deletions
+33
View File
@@ -14,4 +14,37 @@ def app_version(request):
'OS_ICON': os_icon,
'OS_NAME': os_name,
'PAGE_GEN_TIME': page_gen_time,
}
def impersonation(request):
"""Expose the impersonation state for the UI (user-bar chip + menu).
Reads the impersonator id stored in the session when a staff member is
acting as another user.
"""
from django.contrib.auth import get_user_model
from django.core.exceptions import ObjectDoesNotExist
from django.urls import reverse
impersonator_id = request.session.get('impersonator_id')
impersonator = None
avatar_url = None
if impersonator_id:
impersonator = (
get_user_model().objects.filter(pk=impersonator_id).first()
)
if impersonator is None:
request.session.pop('impersonator_id', None)
else:
try:
profile = impersonator.userprofile
except ObjectDoesNotExist:
profile = None
if profile is not None and profile.avatar_id:
avatar_url = reverse('library:file_request', args=[profile.avatar.uuid])
return {
'impersonating': impersonator is not None,
'impersonator': impersonator,
'impersonator_avatar_url': avatar_url,
}