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)