From b8ad8a126265fb030baaac5bbb36c88a5be29d9b Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Mon, 2 Sep 2019 11:17:44 +0200
Subject: [PATCH] Add impersonation function to menus. Advances #63.

---
 biscuit/core/menus.py             | 10 ++++++++++
 biscuit/core/util/core_helpers.py |  6 ++++++
 2 files changed, 16 insertions(+)

diff --git a/biscuit/core/menus.py b/biscuit/core/menus.py
index a8914a5a9..2cefbd09e 100644
--- a/biscuit/core/menus.py
+++ b/biscuit/core/menus.py
@@ -7,6 +7,11 @@ MENUS = {
             'url': '#',
             'root': True,
             'submenu': [
+                {
+                    'name': _('Stop impersonation'),
+                    'url': 'impersonate-stop',
+                    'validators': ['menu_generator.validators.is_authenticated', 'biscuit.core.util.core_helpers.is_impersonate']
+                },
                 {
                     'name': _('Login'),
                     'url': 'login',
@@ -28,6 +33,11 @@ MENUS = {
                     'name': _('Data management'),
                     'url': 'data_management',
                     'validators': ['menu_generator.validators.is_authenticated', 'menu_generator.validators.is_superuser']
+                },
+                {
+                    'name': _('Impersonation'),
+                    'url': 'impersonate-list',
+                    'validators': ['menu_generator.validators.is_authenticated', 'menu_generator.validators.is_superuser']
                 }
             ]
         },
diff --git a/biscuit/core/util/core_helpers.py b/biscuit/core/util/core_helpers.py
index 29f65e399..4752aec92 100644
--- a/biscuit/core/util/core_helpers.py
+++ b/biscuit/core/util/core_helpers.py
@@ -5,6 +5,7 @@ from warnings import warn
 
 from django.apps import apps
 from django.conf import settings
+from django.http import HttpRequest
 
 from django_global_request.middleware import get_request
 
@@ -63,3 +64,8 @@ def get_current_school() -> Optional:
 
     # Raise an exception because not finding a school wreaks havoc
     raise RuntimeError('No school set or found. Check your database.')
+
+
+def is_impersonate(request: HttpRequest) -> bool:
+    if hasattr(request, 'user'):
+        return getattr(request.user, 'is_impersonate', False)
-- 
GitLab