"""
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))