Class based generic views that automatically check permissions

 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
from django.views import generic
from django.contrib.auth.decorators import permission_required


class RestrictedListView(generic.ListView):
    ''' Generic list view that checks permissions '''
    def dispatch(self, request, *args, **kwargs):
        @permission_required('%s.change_%s' % (self.model._meta.app_label, self.model._meta.module_name))
        def wrapper(request, *args, **kwargs):
            return super(RestrictedListView, self).dispatch(request, *args, **kwargs)
        return wrapper(request, *args, **kwargs)

class RestrictedUpdateView(generic.UpdateView):
    ''' Generic update view that checks permissions '''
    def dispatch(self, request, *args, **kwargs):
        @permission_required('%s.change_%s' % (self.model._meta.app_label, self.model._meta.module_name))
        def wrapper(request, *args, **kwargs):
            return super(RestrictedUpdateView, self).dispatch(request, *args, **kwargs)
        return wrapper(request, *args, **kwargs)

class RestrictedCreateView(generic.CreateView):
    ''' Generic create view that checks permissions '''
    def dispatch(self, request, *args, **kwargs):
        @permission_required('%s.create_%s' % (self.model._meta.app_label, self.model._meta.module_name))
        def wrapper(request, *args, **kwargs):
            return super(RestrictedCreateView, self).dispatch(request, *args, **kwargs)
        return wrapper(request, *args, **kwargs)

class RestrictedDeleteView(generic.DeleteView):
    ''' Generic delete view that checks permissions '''
    def dispatch(self, request, *args, **kwargs):
        @permission_required('%s.delete_%s' % (self.model._meta.app_label, self.model._meta.module_name))
        def wrapper(request, *args, **kwargs):
            return super(RestrictedDeleteView, self).dispatch(request, *args, **kwargs)
        return wrapper(request, *args, **kwargs)

More like this

  1. Generic views with row-level permission handling by mwicat 2 years ago
  2. Row-Level, URL-based permissions for FlatPages by bradmontgomery 3 years, 11 months ago
  3. Dynamically insert or append a value to an admin option, e.g. list_display or list_filter by frankban 1 year, 9 months ago
  4. ajax form handler generic view by amitu 4 years, 6 months ago
  5. Class-based coverage test runner by brutasse 2 years, 11 months ago

Comments

(Forgotten your password?)