from django.http import HttpResponse try: from django_scopes import scope except ImportError: from contextlib import nullcontext as scope class UserScopeMiddleware: """ if django_scopes is installed, wrap the current view into a scope of user=request.user override scope_condition to make it conditional must be after AuthenticationMiddleware """ @staticmethod def scope_condition(request): return True def __init__(self, get_response: callable): self.get_response = get_response def __call__(self, request): if self.scope_condition(request): with scope(user=request.user): return self.get_response(request) else: return self.get_response(request) class UserScopeOrDropMiddleware(UserScopeMiddleware): def __call__(self, request): if self.scope_condition(request): if request.user.is_authenticated: with scope(user=request.user): return self.get_response(request) return HttpResponse('Unauthorized', status=401) return self.get_response(request)