views: adapt su() view to work with guest delegates

This commit is contained in:
Benjamin Dauvergne 2013-09-17 21:48:56 +02:00
parent 6ded756009
commit f68d46a94a
1 changed files with 12 additions and 3 deletions

View File

@ -437,7 +437,7 @@ def outbox_by_document(request, document_id):
return redirect('outbox-message', mailbox.id, permanent=True)
from django.contrib.auth import SESSION_KEY
from django.contrib.auth import SESSION_KEY, BACKEND_SESSION_KEY
from django import http
def su(request, username, redirect_url='/'):
@ -447,8 +447,17 @@ def su(request, username, redirect_url='/'):
if request.user.is_superuser or request.session.get('has_superuser_power'):
su_user = get_object_or_404(User, username=username)
if su_user.is_active:
request.session[SESSION_KEY] = su_user.id
request.session['has_superuser_power'] = True
if is_guest(su_user):
real_username = su_user.username.rsplit('-', 1)[0]
real_user = User.objects.get(username=real_username)
pair_id = '%s,%s' % (real_user.id, su_user.id)
request.session[SESSION_KEY] = pair_id
request.session[BACKEND_SESSION_KEY] = 'docbow_project.docbow.auth_backend.DelegationAuthBackend'
request.session['has_superuser_power'] = True
else:
request.session[SESSION_KEY] = su_user.id
request.session['has_superuser_power'] = True
request.session[BACKEND_SESSION_KEY] = 'django.contrib.auth.backends.ModelBackend'
return http.HttpResponseRedirect(redirect_url)
else:
return http.HttpResponseRedirect('/')