1from __future__ import absolute_import 2 3from django.http import HttpResponse 4from django.views.generic.edit import UpdateView, DeleteView, CreateView 5 6from rules.contrib.views import permission_required, objectgetter 7from rules.contrib.views import LoginRequiredMixin, PermissionRequiredMixin 8 9from .models import Book 10 11 12class BookMixin(object): 13 def get_object(self): 14 return Book.objects.get(pk=self.kwargs['book_id']) 15 16 17class BookMixinWithError(object): 18 def get_object(self): 19 raise AttributeError('get_object') 20 21 22@permission_required('testapp.change_book', fn=objectgetter(Book, 'book_id')) 23def change_book(request, book_id): 24 return HttpResponse('OK') 25 26 27 28class BookCreateView(LoginRequiredMixin, PermissionRequiredMixin, BookMixin, CreateView): 29 fields = ['title'] 30 template_name = 'empty.html' 31 permission_required = 'testapp.create_book' 32 33 34class BookUpdateView(LoginRequiredMixin, PermissionRequiredMixin, BookMixin, UpdateView): 35 fields = ['title'] 36 template_name = 'empty.html' 37 permission_required = 'testapp.change_book' 38 39 40class BookUpdateErrorView(LoginRequiredMixin, PermissionRequiredMixin, BookMixinWithError, UpdateView): 41 fields = ['title'] 42 template_name = 'empty.html' 43 permission_required = 'testapp.change_book' 44 45 46@permission_required('testapp.delete_book', fn=objectgetter(Book, 'book_id')) 47def delete_book(request, book_id): 48 return HttpResponse('OK') 49 50 51class BookDeleteView(LoginRequiredMixin, PermissionRequiredMixin, BookMixin, DeleteView): 52 template_name = 'empty.html' 53 permission_required = 'testapp.delete_book' 54 55 56@permission_required('testapp.delete_book', fn=objectgetter(Book, 'book_id'), raise_exception=True) 57def view_that_raises(request, book_id): 58 return HttpResponse('OK') 59 60 61class ViewThatRaises(LoginRequiredMixin, PermissionRequiredMixin, BookMixin, DeleteView): 62 template_name = 'empty.html' 63 raise_exception = True 64 permission_required = 'testapp.delete_book' 65 66 67@permission_required(['testapp.change_book', 'testapp.delete_book'], fn=objectgetter(Book, 'book_id')) 68def view_with_permission_list(request, book_id): 69 return HttpResponse('OK') 70 71 72class ViewWithPermissionList(LoginRequiredMixin, PermissionRequiredMixin, BookMixin, DeleteView): 73 template_name = 'empty.html' 74 permission_required = ['testapp.change_book', 'testapp.delete_book'] 75 76 77@permission_required('testapp.delete_book', fn=objectgetter(Book, 'book_id')) 78def view_with_object(request, book_id): 79 return HttpResponse('OK') 80