"""
django-model-permissions - simple object permissions for django.
Copyright (C) 2018 Mathias Stelzer
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
from django.conf import settings
from django.core.exceptions import PermissionDenied
from django.http import HttpResponseRedirect
[docs]class RedirectMiddleware(object):
    """
    Middleware to redirect PermissionDenied exceptions.
    By default, users are redirected to the :django:setting:`LOGIN_URL`. To change this, set
    ``MODEL_PERMISSIONS_REDIRECT_URL`` in your settings.
    """
    def __init__(self, get_response):
        """Initialize middleware."""
        self.get_response = get_response
    def __call__(self, request):
        """Get and return the response for the given request."""
        return self.get_response(request)
[docs]    def process_exception(self, request, exception):
        """Redirect a `PermissionDenied` exception."""
        if type(exception) == PermissionDenied:
            url = getattr(settings, 'MODEL_PERMISSIONS_REDIRECT_URL', settings.LOGIN_URL)
            return HttpResponseRedirect('{}?next={}'.format(url, request.path))