Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

""" 

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 

 

 

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) 

 

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