Impersonation system implementation
This commit is contained in:
@@ -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,
|
||||
}
|
||||
Reference in New Issue
Block a user