/django-su

Login as any user from the Django admin interface, then switch back when done

Primary LanguagePythonMIT LicenseMIT

django-su

Login as any user from the Django admin interface, then switch back when done

Authored by Adam Charnock, and some great contributors.

https://coveralls.io/repos/adamcharnock/django-su/badge.svg?branch=develop https://landscape.io/github/adamcharnock/django-su/develop/landscape.svg?style=flat

Installation

  1. Either checkout django_su from GitHub, or install using pip :

    pip install django-su
  2. Add django_su to your INSTALLED_APPS. Make sure you put it before django.contrib.admin :

    INSTALLED_APPS = (
        ...
        'django_su',  # must be before ``django.contrib.admin``
        'django.contrib.admin',
    )
  3. Add SuBackend to AUTHENTICATION_BACKENDS :

    AUTHENTICATION_BACKENDS = (
        ...
        'django_su.backends.SuBackend',
    )
  4. Update your urls.py file :

    urlpatterns = patterns('',
        url(r'^su/', include('django_su.urls')),
        ...
    )

And that should be it!

Please see example application. This application is used to manually test the functionalities of this package. This also serves as a good example.

django-su requires Django 1.4 or above. Older versions may work but are untested.

External dependencies (optional, but recommended)

The following apps are optional but will enhance the user experience:

Note that django-ajax-selects requires the following settings:

AJAX_LOOKUP_CHANNELS = {'django_su':  dict(model='auth.user', search_field='username')}

Configuration (optional)

There are various optional configuration options you can set in your settings.py

# URL to redirect after the login.
# Default: "/"
SU_LOGIN_REDIRECT_URL = "/"

# URL to redirect after the logout.
# Default: "/"
SU_LOGOUT_REDIRECT_URL = "/"

# A function specifying the permissions a user requires in order
# to use the django-su functionality.
# Default: None
SU_LOGIN_CALLBACK = "example.utils.su_login_callback"

# A function to override the django.contrib.auth.login(request, user)
# view, thereby allowing one to set session data, etc.
# Default: None
SU_CUSTOM_LOGIN_ACTION = "example.utils.custom_login"

Usage

Go and view a user in the admin interface and look for a new "Login as" button in the top right.

Once you have su'ed into a user, you can get exit back into your original user by navigating to /su/ in your browser.

Notify superuser when connected with another user

This option warns the superuser when working with another user as initally logged in. To activate this option perform:

  1. Add django_su.context_processors.is_su to TEMPLATE_CONTEXT_PROCESSORS :

    TEMPLATE_CONTEXT_PROCESSORS = (
        ...
        'django_su.context_processors.is_su',
    )
  2. In your base.html include su/is_su.html snippet :

    {% include "su/is_su.html" %}

Credits

This app was put together by Adam Charnock, but was largely based on ideas, code and comments at:

django-su is packaged using seed.