web/lib/django/contrib/auth/admin.py
changeset 0 0d40e90630ef
child 29 cc9b7e14412b
equal deleted inserted replaced
-1:000000000000 0:0d40e90630ef
       
     1 from django import template
       
     2 from django.conf import settings
       
     3 from django.contrib import admin
       
     4 from django.contrib.auth.forms import UserCreationForm, UserChangeForm, AdminPasswordChangeForm
       
     5 from django.contrib.auth.models import User, Group
       
     6 from django.core.exceptions import PermissionDenied
       
     7 from django.http import HttpResponseRedirect, Http404
       
     8 from django.shortcuts import render_to_response, get_object_or_404
       
     9 from django.template import RequestContext
       
    10 from django.utils.html import escape
       
    11 from django.utils.translation import ugettext, ugettext_lazy as _
       
    12 
       
    13 class GroupAdmin(admin.ModelAdmin):
       
    14     search_fields = ('name',)
       
    15     ordering = ('name',)
       
    16     filter_horizontal = ('permissions',)
       
    17 
       
    18 class UserAdmin(admin.ModelAdmin):
       
    19     fieldsets = (
       
    20         (None, {'fields': ('username', 'password')}),
       
    21         (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
       
    22         (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
       
    23         (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
       
    24         (_('Groups'), {'fields': ('groups',)}),
       
    25     )
       
    26     form = UserChangeForm
       
    27     add_form = UserCreationForm
       
    28     change_password_form = AdminPasswordChangeForm
       
    29     list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
       
    30     list_filter = ('is_staff', 'is_superuser', 'is_active')
       
    31     search_fields = ('username', 'first_name', 'last_name', 'email')
       
    32     ordering = ('username',)
       
    33     filter_horizontal = ('user_permissions',)
       
    34 
       
    35     def __call__(self, request, url):
       
    36         # this should not be here, but must be due to the way __call__ routes
       
    37         # in ModelAdmin.
       
    38         if url is None:
       
    39             return self.changelist_view(request)
       
    40         if url.endswith('password'):
       
    41             return self.user_change_password(request, url.split('/')[0])
       
    42         return super(UserAdmin, self).__call__(request, url)
       
    43     
       
    44     def get_urls(self):
       
    45         from django.conf.urls.defaults import patterns
       
    46         return patterns('',
       
    47             (r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password))
       
    48         ) + super(UserAdmin, self).get_urls()
       
    49 
       
    50     def add_view(self, request):
       
    51         # It's an error for a user to have add permission but NOT change
       
    52         # permission for users. If we allowed such users to add users, they
       
    53         # could create superusers, which would mean they would essentially have
       
    54         # the permission to change users. To avoid the problem entirely, we
       
    55         # disallow users from adding users if they don't have change
       
    56         # permission.
       
    57         if not self.has_change_permission(request):
       
    58             if self.has_add_permission(request) and settings.DEBUG:
       
    59                 # Raise Http404 in debug mode so that the user gets a helpful
       
    60                 # error message.
       
    61                 raise Http404('Your user does not have the "Change user" permission. In order to add users, Django requires that your user account have both the "Add user" and "Change user" permissions set.')
       
    62             raise PermissionDenied
       
    63         if request.method == 'POST':
       
    64             form = self.add_form(request.POST)
       
    65             if form.is_valid():
       
    66                 new_user = form.save()
       
    67                 msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': 'user', 'obj': new_user}
       
    68                 self.log_addition(request, new_user)
       
    69                 if "_addanother" in request.POST:
       
    70                     request.user.message_set.create(message=msg)
       
    71                     return HttpResponseRedirect(request.path)
       
    72                 elif '_popup' in request.REQUEST:
       
    73                     return self.response_add(request, new_user)
       
    74                 else:
       
    75                     request.user.message_set.create(message=msg + ' ' + ugettext("You may edit it again below."))
       
    76                     return HttpResponseRedirect('../%s/' % new_user.id)
       
    77         else:
       
    78             form = self.add_form()
       
    79         return render_to_response('admin/auth/user/add_form.html', {
       
    80             'title': _('Add user'),
       
    81             'form': form,
       
    82             'is_popup': '_popup' in request.REQUEST,
       
    83             'add': True,
       
    84             'change': False,
       
    85             'has_add_permission': True,
       
    86             'has_delete_permission': False,
       
    87             'has_change_permission': True,
       
    88             'has_file_field': False,
       
    89             'has_absolute_url': False,
       
    90             'auto_populated_fields': (),
       
    91             'opts': self.model._meta,
       
    92             'save_as': False,
       
    93             'username_help_text': self.model._meta.get_field('username').help_text,
       
    94             'root_path': self.admin_site.root_path,
       
    95             'app_label': self.model._meta.app_label,            
       
    96         }, context_instance=template.RequestContext(request))
       
    97 
       
    98     def user_change_password(self, request, id):
       
    99         if not self.has_change_permission(request):
       
   100             raise PermissionDenied
       
   101         user = get_object_or_404(self.model, pk=id)
       
   102         if request.method == 'POST':
       
   103             form = self.change_password_form(user, request.POST)
       
   104             if form.is_valid():
       
   105                 new_user = form.save()
       
   106                 msg = ugettext('Password changed successfully.')
       
   107                 request.user.message_set.create(message=msg)
       
   108                 return HttpResponseRedirect('..')
       
   109         else:
       
   110             form = self.change_password_form(user)
       
   111         return render_to_response('admin/auth/user/change_password.html', {
       
   112             'title': _('Change password: %s') % escape(user.username),
       
   113             'form': form,
       
   114             'is_popup': '_popup' in request.REQUEST,
       
   115             'add': True,
       
   116             'change': False,
       
   117             'has_delete_permission': False,
       
   118             'has_change_permission': True,
       
   119             'has_absolute_url': False,
       
   120             'opts': self.model._meta,
       
   121             'original': user,
       
   122             'save_as': False,
       
   123             'show_save': True,
       
   124             'root_path': self.admin_site.root_path,
       
   125         }, context_instance=RequestContext(request))
       
   126 
       
   127 
       
   128 admin.site.register(Group, GroupAdmin)
       
   129 admin.site.register(User, UserAdmin)
       
   130