From f68d46a94a876bcfed6a6a3f2ae5f8e1b16d2c72 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 17 Sep 2013 21:48:56 +0200 Subject: [PATCH] views: adapt su() view to work with guest delegates --- docbow_project/docbow/views.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/docbow_project/docbow/views.py b/docbow_project/docbow/views.py index d26c062..fbbbd3c 100644 --- a/docbow_project/docbow/views.py +++ b/docbow_project/docbow/views.py @@ -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('/')