add impersonation middleware, add to templates
This commit is contained in:
		
							
								
								
									
										25
									
								
								passbook/admin/middleware.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								passbook/admin/middleware.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
"""passbook admin Middleware to impersonate users"""
 | 
			
		||||
 | 
			
		||||
from passbook.core.models import User
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def impersonate(get_response):
 | 
			
		||||
    """Middleware to impersonate users"""
 | 
			
		||||
 | 
			
		||||
    def middleware(request):
 | 
			
		||||
        """Middleware to impersonate users"""
 | 
			
		||||
 | 
			
		||||
        # User is superuser and has __impersonate ID set
 | 
			
		||||
        if request.user.is_superuser and "__impersonate" in request.GET:
 | 
			
		||||
            request.session['impersonate_id'] = request.GET["__impersonate"]
 | 
			
		||||
        # user wants to stop impersonation
 | 
			
		||||
        elif "__unimpersonate" in request.GET and 'impersonate_id' in request.session:
 | 
			
		||||
            del request.session['impersonate_id']
 | 
			
		||||
 | 
			
		||||
        # Actually impersonate user
 | 
			
		||||
        if request.user.is_superuser and 'impersonate_id' in request.session:
 | 
			
		||||
            request.user = User.objects.get(pk=request.session['impersonate_id'])
 | 
			
		||||
 | 
			
		||||
        response = get_response(request)
 | 
			
		||||
        return response
 | 
			
		||||
    return middleware
 | 
			
		||||
							
								
								
									
										5
									
								
								passbook/admin/settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								passbook/admin/settings.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
"""passbook admin settings"""
 | 
			
		||||
 | 
			
		||||
MIDDLEWARE = [
 | 
			
		||||
    'passbook.admin.middleware.impersonate',
 | 
			
		||||
]
 | 
			
		||||
@ -31,6 +31,8 @@
 | 
			
		||||
                        href="{% url 'passbook_admin:user-delete' pk=user.pk %}?back={{ request.get_full_path }}">{% trans 'Delete' %}</a>
 | 
			
		||||
                    <a class="btn btn-default btn-sm"
 | 
			
		||||
                        href="{% url 'passbook_admin:user-password-reset' pk=user.pk %}?back={{ request.get_full_path }}">{% trans 'Reset Password' %}</a>
 | 
			
		||||
                    <a class="btn btn-default btn-sm"
 | 
			
		||||
                        href="{% url 'passbook_core:overview' %}?__impersonate={{ user.pk }}">{% trans 'Impersonate' %}</a>
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
 | 
			
		||||
@ -4,40 +4,51 @@
 | 
			
		||||
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <title>
 | 
			
		||||
      {% block title %}
 | 
			
		||||
        {% title %}
 | 
			
		||||
      {% endblock %}
 | 
			
		||||
    </title>
 | 
			
		||||
    <link rel="icon" type="image/png" href="{% static 'img/logo.png' %}">
 | 
			
		||||
    <link rel="shortcut icon" type="image/png" href="{% static 'img/logo.png' %}">
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="{% static 'css/patternfly.min.css' %}">
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="{% static 'css/patternfly-additions.min.css' %}">
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="{% static 'css/passbook.css' %}">
 | 
			
		||||
    <style>
 | 
			
		||||
        .login-pf {
 | 
			
		||||
            background-attachment: fixed;
 | 
			
		||||
            scroll-behavior: smooth;
 | 
			
		||||
            background-size: cover;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
    {% block head %}
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
  <meta charset="UTF-8">
 | 
			
		||||
  <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
  <title>
 | 
			
		||||
    {% block title %}
 | 
			
		||||
    {% title %}
 | 
			
		||||
    {% endblock %}
 | 
			
		||||
  </head>
 | 
			
		||||
  <body {% if is_login %} class="login-pf" {% endif %}>
 | 
			
		||||
    {% block body %}
 | 
			
		||||
    {% endblock %}
 | 
			
		||||
    <script src="{% static 'js/jquery.min.js' %}"></script>
 | 
			
		||||
    <script src="{% static 'js/bootstrap.min.js' %}"></script>
 | 
			
		||||
    <script src="{% static 'js/patternfly.min.js' %}"></script>
 | 
			
		||||
    <script src="{% static 'js/passbook.js' %}"></script>
 | 
			
		||||
    {% block scripts %}
 | 
			
		||||
    {% endblock %}
 | 
			
		||||
    <div class="modals">
 | 
			
		||||
      {% include 'partials/about_modal.html' %}
 | 
			
		||||
    </div>
 | 
			
		||||
  </body>
 | 
			
		||||
  </title>
 | 
			
		||||
  <link rel="icon" type="image/png" href="{% static 'img/logo.png' %}">
 | 
			
		||||
  <link rel="shortcut icon" type="image/png" href="{% static 'img/logo.png' %}">
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="{% static 'css/patternfly.min.css' %}">
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="{% static 'css/patternfly-additions.min.css' %}">
 | 
			
		||||
  <link rel="stylesheet" type="text/css" href="{% static 'css/passbook.css' %}">
 | 
			
		||||
  <style>
 | 
			
		||||
    .login-pf {
 | 
			
		||||
      background-attachment: fixed;
 | 
			
		||||
      scroll-behavior: smooth;
 | 
			
		||||
      background-size: cover;
 | 
			
		||||
    }
 | 
			
		||||
  </style>
 | 
			
		||||
  {% block head %}
 | 
			
		||||
  {% endblock %}
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body {% if is_login %} class="login-pf" {% endif %}>
 | 
			
		||||
  {% if 'impersonate_id' in request.session %}
 | 
			
		||||
  <div class="experimental-pf-bar">
 | 
			
		||||
    <span id="experimentalBar" class="experimental-pf-text">
 | 
			
		||||
      {% blocktrans with user=user %}You're currently impersonating {{ user }}.{% endblocktrans %}
 | 
			
		||||
      <a href="?__unimpersonate=True" id="acceptMessage">{% trans 'Stop impersonation' %}</a>
 | 
			
		||||
    </span>
 | 
			
		||||
  </div>
 | 
			
		||||
  {% endif %}
 | 
			
		||||
  {% block body %}
 | 
			
		||||
  {% endblock %}
 | 
			
		||||
  <script src="{% static 'js/jquery.min.js' %}"></script>
 | 
			
		||||
  <script src="{% static 'js/bootstrap.min.js' %}"></script>
 | 
			
		||||
  <script src="{% static 'js/patternfly.min.js' %}"></script>
 | 
			
		||||
  <script src="{% static 'js/passbook.js' %}"></script>
 | 
			
		||||
  {% block scripts %}
 | 
			
		||||
  {% endblock %}
 | 
			
		||||
  <div class="modals">
 | 
			
		||||
    {% include 'partials/about_modal.html' %}
 | 
			
		||||
  </div>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user