Code

Ticket #6363: 6363.diff

File 6363.diff, 2.7 KB (added by Karen Tracey <kmtracey@…>, 6 years ago)
Line 
1Index: django/contrib/admin/sites.py
2===================================================================
3--- django/contrib/admin/sites.py       (revision 7787)
4+++ django/contrib/admin/sites.py       (working copy)
5@@ -1,6 +1,6 @@
6 from django import http, template
7 from django.contrib.admin import ModelAdmin
8-from django.contrib.auth import authenticate, login
9+from django.contrib.auth import authenticate, login, logout
10 from django.db.models.base import ModelBase
11 from django.shortcuts import render_to_response
12 from django.utils.safestring import mark_safe
13@@ -243,21 +243,27 @@
14         else:
15             if user.is_active and user.is_staff:
16                 login(request, user)
17-                # TODO: set last_login with an event.
18-                user.last_login = datetime.datetime.now()
19-                user.save()
20-                if request.POST.has_key('post_data'):
21-                    post_data = _decode_post_data(request.POST['post_data'])
22-                    if post_data and not post_data.has_key(LOGIN_FORM_KEY):
23-                        # overwrite request.POST with the saved post_data, and continue
24-                        request.POST = post_data
25-                        request.user = user
26-                        return None
27-                    else:
28-                        request.session.delete_test_cookie()
29-                        return http.HttpResponseRedirect(request.path)
30-            else:
31-                return self.display_login_form(request, ERROR_MESSAGE)
32+               
33+                if self.has_permission(request):               
34+                    # TODO: set last_login with an event.
35+                    user.last_login = datetime.datetime.now()
36+                    user.save()
37+                    if request.POST.has_key('post_data'):
38+                        post_data = _decode_post_data(request.POST['post_data'])
39+                        if post_data and not post_data.has_key(LOGIN_FORM_KEY):
40+                            # overwrite request.POST with the saved post_data, and continue
41+                            request.POST = post_data
42+                            request.user = user
43+                            return None
44+                        else:
45+                            request.session.delete_test_cookie()
46+                            return http.HttpResponseRedirect(request.path)
47+                       
48+                # logged in a user without permission to access this admin site, un-do that
49+                # and fall through to re-display the login form with an error message.
50+                logout(request)
51+
52+            return self.display_login_form(request, ERROR_MESSAGE)
53     login = never_cache(login)
54 
55     def index(self, request, extra_context=None):