diff --git a/biscuit/core/menus.py b/biscuit/core/menus.py index a8914a5a9bf0ee8c27017f9638d90bdd7e3cb501..2cefbd09e5d98eeba855db2fc03d004aa19e0404 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 29f65e3992e24f08a4ad350e0959c45cc7877d0e..4752aec92a3e415a0078cdb8e6db5cf8648d4a81 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)