66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
'''
|
|
---------------------------------------- Masequerade ----------------------------------------
|
|
Allow course staff to see a student or staff view of courseware.
|
|
Which kind of view has been selected is stored in the session state.
|
|
'''
|
|
|
|
import json
|
|
import logging
|
|
|
|
from django.http import HttpResponse
|
|
from django.conf import settings
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
MASQ_KEY = 'masquerade_identity'
|
|
|
|
|
|
def handle_ajax(request, marg):
|
|
'''
|
|
Handle ajax call from "staff view" / "student view" toggle button
|
|
'''
|
|
if marg == 'toggle':
|
|
status = request.session.get(MASQ_KEY, '')
|
|
if status is None or status in ['', 'staff']:
|
|
status = 'student'
|
|
else:
|
|
status = 'staff'
|
|
request.session[MASQ_KEY] = status
|
|
return HttpResponse(json.dumps({'status': status}))
|
|
|
|
|
|
def setup_masquerade(request, staff_access=False):
|
|
'''
|
|
Setup masquerade identity (allows staff to view courseware as either staff or student)
|
|
|
|
Uses request.session[MASQ_KEY] to store status of masquerading.
|
|
Adds masquerade status to request.user, if masquerading active.
|
|
Return string version of status of view (either 'staff' or 'student')
|
|
'''
|
|
if request.user is None:
|
|
return None
|
|
|
|
if not settings.MITX_FEATURES.get('ENABLE_MASQUERADE', False):
|
|
return None
|
|
|
|
if not staff_access: # can masquerade only if user has staff access to course
|
|
return None
|
|
|
|
usertype = request.session.get(MASQ_KEY, '')
|
|
if usertype is None or not usertype:
|
|
request.session[MASQ_KEY] = 'staff'
|
|
usertype = 'staff'
|
|
|
|
if usertype == 'student':
|
|
request.user.masquerade_as_student = True
|
|
|
|
return usertype
|
|
|
|
|
|
def is_masquerading_as_student(user):
|
|
'''
|
|
Return True if user is masquerading as a student, False otherwise
|
|
'''
|
|
masq = getattr(user, 'masquerade_as_student', False)
|
|
return masq==True
|