Overview
Django CRUM (Current Request User Middleware) captures the current request and user in thread local storage. It enables apps to check permissions, capture audit trails or otherwise access the current request and user without requiring the request object to be passed directly. It also offers a context manager to allow for temporarily impersonating another user.
Also available at https://github.com/ninemoreminutes/django-crum