admin(major): rewrite all views to use guardian mixins
This commit is contained in:
		| @ -1,19 +1,24 @@ | |||||||
| """passbook Application administration""" | """passbook Application administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from django.views.generic import DeleteView, ListView, UpdateView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.forms.applications import ApplicationForm | from passbook.core.forms.applications import ApplicationForm | ||||||
| from passbook.core.models import Application | from passbook.core.models import Application | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| class ApplicationListView(AdminRequiredMixin, ListView): | class ApplicationListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all applications""" |     """Show list of all applications""" | ||||||
|  |  | ||||||
|     model = Application |     model = Application | ||||||
|  |     permission_required = 'passbook_core.view_application' | ||||||
|     ordering = 'name' |     ordering = 'name' | ||||||
|     template_name = 'administration/application/list.html' |     template_name = 'administration/application/list.html' | ||||||
|  |  | ||||||
| @ -21,10 +26,18 @@ class ApplicationListView(AdminRequiredMixin, ListView): | |||||||
|         return super().get_queryset().select_subclasses() |         return super().get_queryset().select_subclasses() | ||||||
|  |  | ||||||
|  |  | ||||||
| class ApplicationCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class ApplicationCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                             DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Application""" |     """Create new Application""" | ||||||
|  |  | ||||||
|  |     model = Application | ||||||
|     form_class = ApplicationForm |     form_class = ApplicationForm | ||||||
|  |     permission_required = 'passbook_core.add_application' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_application', | ||||||
|  |         'passbook_core.change_application', | ||||||
|  |         'passbook_core.delete_application', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:applications') |     success_url = reverse_lazy('passbook_admin:applications') | ||||||
| @ -35,21 +48,25 @@ class ApplicationCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView) | |||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ApplicationUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class ApplicationUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                             PermissionRequiredMixin, UpdateView): | ||||||
|     """Update application""" |     """Update application""" | ||||||
|  |  | ||||||
|     model = Application |     model = Application | ||||||
|     form_class = ApplicationForm |     form_class = ApplicationForm | ||||||
|  |     permission_required = 'passbook_core.change_application' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:applications') |     success_url = reverse_lazy('passbook_admin:applications') | ||||||
|     success_message = _('Successfully updated Application') |     success_message = _('Successfully updated Application') | ||||||
|  |  | ||||||
|  |  | ||||||
| class ApplicationDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class ApplicationDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                             PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete application""" |     """Delete application""" | ||||||
|  |  | ||||||
|     model = Application |     model = Application | ||||||
|  |     permission_required = 'passbook_core.delete_application' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:applications') |     success_url = reverse_lazy('passbook_admin:applications') | ||||||
|  | |||||||
| @ -1,15 +1,17 @@ | |||||||
| """passbook AuditEntry administration""" | """passbook AuditEntry administration""" | ||||||
| from django.views.generic import ListView | from django.views.generic import ListView | ||||||
|  | from guardian.mixins import PermissionListMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.audit.models import AuditEntry | from passbook.audit.models import AuditEntry | ||||||
|  |  | ||||||
|  |  | ||||||
| class AuditEntryListView(AdminRequiredMixin, ListView): | class AuditEntryListView(PermissionListMixin, ListView): | ||||||
|     """Show list of all invitations""" |     """Show list of all invitations""" | ||||||
|  |  | ||||||
|     model = AuditEntry |     model = AuditEntry | ||||||
|     template_name = 'administration/audit/list.html' |     template_name = 'administration/audit/list.html' | ||||||
|  |     permission_required = 'passbook_audit.view_auditentry' | ||||||
|  |     ordering = '-created' | ||||||
|     paginate_by = 10 |     paginate_by = 10 | ||||||
|  |  | ||||||
|     def get_queryset(self): |     def get_queryset(self): | ||||||
|  | |||||||
| @ -1,11 +1,9 @@ | |||||||
| """passbook administration debug views""" | """passbook administration debug views""" | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
| from django.views.generic import TemplateView | from django.views.generic import TemplateView | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
|  |  | ||||||
|  | class DebugRequestView(LoginRequiredMixin, TemplateView): | ||||||
| class DebugRequestView(AdminRequiredMixin, TemplateView): |  | ||||||
|     """Show debug info about request""" |     """Show debug info about request""" | ||||||
|  |  | ||||||
|     template_name = 'administration/debug/request.html' |     template_name = 'administration/debug/request.html' | ||||||
|  | |||||||
| @ -1,14 +1,18 @@ | |||||||
| """passbook Factor administration""" | """passbook Factor administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.http import Http404 | from django.http import Http404 | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from django.views.generic import DeleteView, ListView, UpdateView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.models import Factor | from passbook.core.models import Factor | ||||||
| from passbook.lib.utils.reflection import path_to_class | from passbook.lib.utils.reflection import path_to_class | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| def all_subclasses(cls): | def all_subclasses(cls): | ||||||
| @ -16,11 +20,13 @@ def all_subclasses(cls): | |||||||
|     return set(cls.__subclasses__()).union( |     return set(cls.__subclasses__()).union( | ||||||
|         [s for c in cls.__subclasses__() for s in all_subclasses(c)]) |         [s for c in cls.__subclasses__() for s in all_subclasses(c)]) | ||||||
|  |  | ||||||
| class FactorListView(AdminRequiredMixin, ListView): |  | ||||||
|  | class FactorListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all factors""" |     """Show list of all factors""" | ||||||
|  |  | ||||||
|     model = Factor |     model = Factor | ||||||
|     template_name = 'administration/factor/list.html' |     template_name = 'administration/factor/list.html' | ||||||
|  |     permission_required = 'passbook_core.view_factor' | ||||||
|     ordering = 'order' |     ordering = 'order' | ||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
| @ -31,10 +37,20 @@ class FactorListView(AdminRequiredMixin, ListView): | |||||||
|     def get_queryset(self): |     def get_queryset(self): | ||||||
|         return super().get_queryset().select_subclasses() |         return super().get_queryset().select_subclasses() | ||||||
|  |  | ||||||
| class FactorCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): |  | ||||||
|  | class FactorCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Factor""" |     """Create new Factor""" | ||||||
|  |  | ||||||
|  |     model = Factor | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|  |     permission_required = 'passbook_core.add_factor' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_factor', | ||||||
|  |         'passbook_core.change_factor', | ||||||
|  |         'passbook_core.delete_factor', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     success_url = reverse_lazy('passbook_admin:factors') |     success_url = reverse_lazy('passbook_admin:factors') | ||||||
|     success_message = _('Successfully created Factor') |     success_message = _('Successfully created Factor') | ||||||
|  |  | ||||||
| @ -52,10 +68,13 @@ class FactorCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | |||||||
|             raise Http404 |             raise Http404 | ||||||
|         return path_to_class(model.form) |         return path_to_class(model.form) | ||||||
|  |  | ||||||
| class FactorUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): |  | ||||||
|  | class FactorUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        PermissionRequiredMixin, UpdateView): | ||||||
|     """Update factor""" |     """Update factor""" | ||||||
|  |  | ||||||
|     model = Factor |     model = Factor | ||||||
|  |     permission_required = 'passbook_core.update_application' | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:factors') |     success_url = reverse_lazy('passbook_admin:factors') | ||||||
|     success_message = _('Successfully updated Factor') |     success_message = _('Successfully updated Factor') | ||||||
| @ -68,11 +87,14 @@ class FactorUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | |||||||
|     def get_object(self, queryset=None): |     def get_object(self, queryset=None): | ||||||
|         return Factor.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() |         return Factor.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() | ||||||
|  |  | ||||||
| class FactorDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): |  | ||||||
|  | class FactorDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete factor""" |     """Delete factor""" | ||||||
|  |  | ||||||
|     model = Factor |     model = Factor | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|  |     permission_required = 'passbook_core.delete_factor' | ||||||
|     success_url = reverse_lazy('passbook_admin:factors') |     success_url = reverse_lazy('passbook_admin:factors') | ||||||
|     success_message = _('Successfully deleted Factor') |     success_message = _('Successfully deleted Factor') | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,28 +1,40 @@ | |||||||
| """passbook Group administration""" | """passbook Group administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from django.views.generic import DeleteView, ListView, UpdateView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.forms.groups import GroupForm | from passbook.core.forms.groups import GroupForm | ||||||
| from passbook.core.models import Group | from passbook.core.models import Group | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| class GroupListView(AdminRequiredMixin, ListView): | class GroupListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all groups""" |     """Show list of all groups""" | ||||||
|  |  | ||||||
|     model = Group |     model = Group | ||||||
|  |     permission_required = 'passbook_core.view_group' | ||||||
|     ordering = 'name' |     ordering = 'name' | ||||||
|     template_name = 'administration/group/list.html' |     template_name = 'administration/group/list.html' | ||||||
|  |  | ||||||
|  |  | ||||||
| class GroupCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class GroupCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                       DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Group""" |     """Create new Group""" | ||||||
|  |  | ||||||
|  |     model = Group | ||||||
|     form_class = GroupForm |     form_class = GroupForm | ||||||
|  |     permission_required = 'passbook_core.add_group' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_group', | ||||||
|  |         'passbook_core.change_group', | ||||||
|  |         'passbook_core.delete_group', | ||||||
|  |     ] | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:groups') |     success_url = reverse_lazy('passbook_admin:groups') | ||||||
|     success_message = _('Successfully created Group') |     success_message = _('Successfully created Group') | ||||||
| @ -32,18 +44,20 @@ class GroupCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | |||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
| class GroupUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class GroupUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                       PermissionRequiredMixin, UpdateView): | ||||||
|     """Update group""" |     """Update group""" | ||||||
|  |  | ||||||
|     model = Group |     model = Group | ||||||
|     form_class = GroupForm |     form_class = GroupForm | ||||||
|  |     permission_required = 'passbook_core.change_group' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:groups') |     success_url = reverse_lazy('passbook_admin:groups') | ||||||
|     success_message = _('Successfully updated Group') |     success_message = _('Successfully updated Group') | ||||||
|  |  | ||||||
|  |  | ||||||
| class GroupDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class GroupDeleteView(SuccessMessageMixin, LoginRequiredMixin, DeleteView): | ||||||
|     """Delete group""" |     """Delete group""" | ||||||
|  |  | ||||||
|     model = Group |     model = Group | ||||||
|  | |||||||
| @ -1,31 +1,44 @@ | |||||||
| """passbook Invitation administration""" | """passbook Invitation administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.http import HttpResponseRedirect | from django.http import HttpResponseRedirect | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView | from django.views.generic import DeleteView, ListView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.forms.invitations import InvitationForm | from passbook.core.forms.invitations import InvitationForm | ||||||
| from passbook.core.models import Invitation | from passbook.core.models import Invitation | ||||||
| from passbook.core.signals import invitation_created | from passbook.core.signals import invitation_created | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| class InvitationListView(AdminRequiredMixin, ListView): | class InvitationListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all invitations""" |     """Show list of all invitations""" | ||||||
|  |  | ||||||
|     model = Invitation |     model = Invitation | ||||||
|  |     permission_required = 'passbook_core.view_invitation' | ||||||
|     template_name = 'administration/invitation/list.html' |     template_name = 'administration/invitation/list.html' | ||||||
|  |  | ||||||
|  |  | ||||||
| class InvitationCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class InvitationCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                            DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Invitation""" |     """Create new Invitation""" | ||||||
|  |  | ||||||
|  |     model = Invitation | ||||||
|  |     form_class = InvitationForm | ||||||
|  |     permission_required = 'passbook_core.add_invitation' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_invitation', | ||||||
|  |         'passbook_core.change_invitation', | ||||||
|  |         'passbook_core.delete_invitation', | ||||||
|  |     ] | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:invitations') |     success_url = reverse_lazy('passbook_admin:invitations') | ||||||
|     success_message = _('Successfully created Invitation') |     success_message = _('Successfully created Invitation') | ||||||
|     form_class = InvitationForm |  | ||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         kwargs['type'] = 'Invitation' |         kwargs['type'] = 'Invitation' | ||||||
| @ -41,10 +54,14 @@ class InvitationCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | |||||||
|             invitation=obj) |             invitation=obj) | ||||||
|         return HttpResponseRedirect(self.success_url) |         return HttpResponseRedirect(self.success_url) | ||||||
|  |  | ||||||
| class InvitationDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): |  | ||||||
|  | class InvitationDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                            PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete invitation""" |     """Delete invitation""" | ||||||
|  |  | ||||||
|     model = Invitation |     model = Invitation | ||||||
|  |     permission_required = 'passbook_core.delete_invitation' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:invitations') |     success_url = reverse_lazy('passbook_admin:invitations') | ||||||
|     success_message = _('Successfully deleted Invitation') |     success_message = _('Successfully deleted Invitation') | ||||||
|  | |||||||
| @ -1,24 +1,30 @@ | |||||||
| """passbook Policy administration""" | """passbook Policy administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.http import Http404 | from django.http import Http404 | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import (CreateView, DeleteView, FormView, ListView, | from django.views.generic import (DeleteView, FormView, ListView, | ||||||
|                                   UpdateView) |                                   UpdateView) | ||||||
| from django.views.generic.detail import DetailView | from django.views.generic.detail import DetailView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.forms.policies import PolicyTestForm | from passbook.admin.forms.policies import PolicyTestForm | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.models import Policy | from passbook.core.models import Policy | ||||||
| from passbook.lib.utils.reflection import path_to_class | from passbook.lib.utils.reflection import path_to_class | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
| from passbook.policies.engine import PolicyEngine | from passbook.policies.engine import PolicyEngine | ||||||
|  |  | ||||||
|  |  | ||||||
| class PolicyListView(AdminRequiredMixin, ListView): | class PolicyListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all policies""" |     """Show list of all policies""" | ||||||
|  |  | ||||||
|     model = Policy |     model = Policy | ||||||
|  |     permission_required = 'passbook_core.view_policy' | ||||||
|  |  | ||||||
|     template_name = 'administration/policy/list.html' |     template_name = 'administration/policy/list.html' | ||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
| @ -30,9 +36,18 @@ class PolicyListView(AdminRequiredMixin, ListView): | |||||||
|         return super().get_queryset().order_by('order').select_subclasses() |         return super().get_queryset().order_by('order').select_subclasses() | ||||||
|  |  | ||||||
|  |  | ||||||
| class PolicyCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class PolicyCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Policy""" |     """Create new Policy""" | ||||||
|  |  | ||||||
|  |     model = Policy | ||||||
|  |     permission_required = 'passbook_core.add_policy' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_policy', | ||||||
|  |         'passbook_core.change_policy', | ||||||
|  |         'passbook_core.delete_policy', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:policies') |     success_url = reverse_lazy('passbook_admin:policies') | ||||||
|     success_message = _('Successfully created Policy') |     success_message = _('Successfully created Policy') | ||||||
| @ -46,10 +61,13 @@ class PolicyCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | |||||||
|         return path_to_class(model.form) |         return path_to_class(model.form) | ||||||
|  |  | ||||||
|  |  | ||||||
| class PolicyUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class PolicyUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        PermissionRequiredMixin, UpdateView): | ||||||
|     """Update policy""" |     """Update policy""" | ||||||
|  |  | ||||||
|     model = Policy |     model = Policy | ||||||
|  |     permission_required = 'passbook_core.change_policy' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:policies') |     success_url = reverse_lazy('passbook_admin:policies') | ||||||
|     success_message = _('Successfully updated Policy') |     success_message = _('Successfully updated Policy') | ||||||
| @ -63,10 +81,13 @@ class PolicyUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | |||||||
|         return Policy.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() |         return Policy.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() | ||||||
|  |  | ||||||
|  |  | ||||||
| class PolicyDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class PolicyDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete policy""" |     """Delete policy""" | ||||||
|  |  | ||||||
|     model = Policy |     model = Policy | ||||||
|  |     permission_required = 'passbook_core.delete_policy' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:policies') |     success_url = reverse_lazy('passbook_admin:policies') | ||||||
|     success_message = _('Successfully deleted Policy') |     success_message = _('Successfully deleted Policy') | ||||||
| @ -79,11 +100,12 @@ class PolicyDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | |||||||
|         return super().delete(request, *args, **kwargs) |         return super().delete(request, *args, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
| class PolicyTestView(AdminRequiredMixin, DetailView, FormView): | class PolicyTestView(LoginRequiredMixin, DetailView, PermissionRequiredMixin, FormView): | ||||||
|     """View to test policy(s)""" |     """View to test policy(s)""" | ||||||
|  |  | ||||||
|     model = Policy |     model = Policy | ||||||
|     form_class = PolicyTestForm |     form_class = PolicyTestForm | ||||||
|  |     permission_required = 'passbook_core.view_policy' | ||||||
|     template_name = 'administration/policy/test.html' |     template_name = 'administration/policy/test.html' | ||||||
|     object = None |     object = None | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,14 +1,18 @@ | |||||||
| """passbook PropertyMapping administration""" | """passbook PropertyMapping administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.http import Http404 | from django.http import Http404 | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from django.views.generic import DeleteView, ListView, UpdateView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.models import PropertyMapping | from passbook.core.models import PropertyMapping | ||||||
| from passbook.lib.utils.reflection import path_to_class | from passbook.lib.utils.reflection import path_to_class | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| def all_subclasses(cls): | def all_subclasses(cls): | ||||||
| @ -17,10 +21,11 @@ def all_subclasses(cls): | |||||||
|         [s for c in cls.__subclasses__() for s in all_subclasses(c)]) |         [s for c in cls.__subclasses__() for s in all_subclasses(c)]) | ||||||
|  |  | ||||||
|  |  | ||||||
| class PropertyMappingListView(AdminRequiredMixin, ListView): | class PropertyMappingListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all property_mappings""" |     """Show list of all property_mappings""" | ||||||
|  |  | ||||||
|     model = PropertyMapping |     model = PropertyMapping | ||||||
|  |     permission_required = 'passbook_core.view_propertymapping' | ||||||
|     template_name = 'administration/property_mapping/list.html' |     template_name = 'administration/property_mapping/list.html' | ||||||
|     ordering = 'name' |     ordering = 'name' | ||||||
|  |  | ||||||
| @ -33,9 +38,18 @@ class PropertyMappingListView(AdminRequiredMixin, ListView): | |||||||
|         return super().get_queryset().select_subclasses() |         return super().get_queryset().select_subclasses() | ||||||
|  |  | ||||||
|  |  | ||||||
| class PropertyMappingCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class PropertyMappingCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                                 DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new PropertyMapping""" |     """Create new PropertyMapping""" | ||||||
|  |  | ||||||
|  |     model = PropertyMapping | ||||||
|  |     permission_required = 'passbook_core.add_propertymapping' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_propertymapping', | ||||||
|  |         'passbook_core.change_propertymapping', | ||||||
|  |         'passbook_core.delete_propertymapping', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:property-mappings') |     success_url = reverse_lazy('passbook_admin:property-mappings') | ||||||
|     success_message = _('Successfully created Property Mapping') |     success_message = _('Successfully created Property Mapping') | ||||||
| @ -57,10 +71,13 @@ class PropertyMappingCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateV | |||||||
|         return path_to_class(model.form) |         return path_to_class(model.form) | ||||||
|  |  | ||||||
|  |  | ||||||
| class PropertyMappingUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class PropertyMappingUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                                 PermissionRequiredMixin, UpdateView): | ||||||
|     """Update property_mapping""" |     """Update property_mapping""" | ||||||
|  |  | ||||||
|     model = PropertyMapping |     model = PropertyMapping | ||||||
|  |     permission_required = 'passbook_core.change_propertymapping' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:property-mappings') |     success_url = reverse_lazy('passbook_admin:property-mappings') | ||||||
|     success_message = _('Successfully updated Property Mapping') |     success_message = _('Successfully updated Property Mapping') | ||||||
| @ -74,10 +91,13 @@ class PropertyMappingUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateV | |||||||
|         return PropertyMapping.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() |         return PropertyMapping.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() | ||||||
|  |  | ||||||
|  |  | ||||||
| class PropertyMappingDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class PropertyMappingDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                                 PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete property_mapping""" |     """Delete property_mapping""" | ||||||
|  |  | ||||||
|     model = PropertyMapping |     model = PropertyMapping | ||||||
|  |     permission_required = 'passbook_core.delete_propertymapping' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:property-mappings') |     success_url = reverse_lazy('passbook_admin:property-mappings') | ||||||
|     success_message = _('Successfully deleted Property Mapping') |     success_message = _('Successfully deleted Property Mapping') | ||||||
|  | |||||||
| @ -1,20 +1,25 @@ | |||||||
| """passbook Provider administration""" | """passbook Provider administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.http import Http404 | from django.http import Http404 | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from django.views.generic import DeleteView, ListView, UpdateView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.models import Provider | from passbook.core.models import Provider | ||||||
| from passbook.lib.utils.reflection import path_to_class | from passbook.lib.utils.reflection import path_to_class | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| class ProviderListView(AdminRequiredMixin, ListView): | class ProviderListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all providers""" |     """Show list of all providers""" | ||||||
|  |  | ||||||
|     model = Provider |     model = Provider | ||||||
|  |     permission_required = 'passbook_core.add_provider' | ||||||
|     template_name = 'administration/provider/list.html' |     template_name = 'administration/provider/list.html' | ||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
| @ -26,9 +31,18 @@ class ProviderListView(AdminRequiredMixin, ListView): | |||||||
|         return super().get_queryset().select_subclasses() |         return super().get_queryset().select_subclasses() | ||||||
|  |  | ||||||
|  |  | ||||||
| class ProviderCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class ProviderCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                          DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Provider""" |     """Create new Provider""" | ||||||
|  |  | ||||||
|  |     model = Provider | ||||||
|  |     permission_required = 'passbook_core.add_provider' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_provider', | ||||||
|  |         'passbook_core.change_provider', | ||||||
|  |         'passbook_core.delete_provider', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:providers') |     success_url = reverse_lazy('passbook_admin:providers') | ||||||
|     success_message = _('Successfully created Provider') |     success_message = _('Successfully created Provider') | ||||||
| @ -42,10 +56,13 @@ class ProviderCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | |||||||
|         return path_to_class(model.form) |         return path_to_class(model.form) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ProviderUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class ProviderUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                          PermissionRequiredMixin, UpdateView): | ||||||
|     """Update provider""" |     """Update provider""" | ||||||
|  |  | ||||||
|     model = Provider |     model = Provider | ||||||
|  |     permission_required = 'passbook_core.change_provider' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:providers') |     success_url = reverse_lazy('passbook_admin:providers') | ||||||
|     success_message = _('Successfully updated Provider') |     success_message = _('Successfully updated Provider') | ||||||
| @ -59,10 +76,13 @@ class ProviderUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | |||||||
|         return Provider.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() |         return Provider.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() | ||||||
|  |  | ||||||
|  |  | ||||||
| class ProviderDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class ProviderDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                          PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete provider""" |     """Delete provider""" | ||||||
|  |  | ||||||
|     model = Provider |     model = Provider | ||||||
|  |     permission_required = 'passbook_core.delete_provider' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:providers') |     success_url = reverse_lazy('passbook_admin:providers') | ||||||
|     success_message = _('Successfully deleted Provider') |     success_message = _('Successfully deleted Provider') | ||||||
|  | |||||||
| @ -1,14 +1,18 @@ | |||||||
| """passbook Source administration""" | """passbook Source administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.http import Http404 | from django.http import Http404 | ||||||
| from django.urls import reverse_lazy | from django.urls import reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from django.views.generic import DeleteView, ListView, UpdateView | ||||||
|  | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.models import Source | from passbook.core.models import Source | ||||||
| from passbook.lib.utils.reflection import path_to_class | from passbook.lib.utils.reflection import path_to_class | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| def all_subclasses(cls): | def all_subclasses(cls): | ||||||
| @ -16,10 +20,11 @@ def all_subclasses(cls): | |||||||
|     return set(cls.__subclasses__()).union( |     return set(cls.__subclasses__()).union( | ||||||
|         [s for c in cls.__subclasses__() for s in all_subclasses(c)]) |         [s for c in cls.__subclasses__() for s in all_subclasses(c)]) | ||||||
|  |  | ||||||
| class SourceListView(AdminRequiredMixin, ListView): | class SourceListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all sources""" |     """Show list of all sources""" | ||||||
|  |  | ||||||
|     model = Source |     model = Source | ||||||
|  |     permission_required = 'passbook_core.view_source' | ||||||
|     template_name = 'administration/source/list.html' |     template_name = 'administration/source/list.html' | ||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
| @ -31,9 +36,18 @@ class SourceListView(AdminRequiredMixin, ListView): | |||||||
|         return super().get_queryset().select_subclasses() |         return super().get_queryset().select_subclasses() | ||||||
|  |  | ||||||
|  |  | ||||||
| class SourceCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class SourceCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create new Source""" |     """Create new Source""" | ||||||
|  |  | ||||||
|  |     model = Source | ||||||
|  |     permission_required = 'passbook_core.add_source' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_source', | ||||||
|  |         'passbook_core.change_source', | ||||||
|  |         'passbook_core.delete_source', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:sources') |     success_url = reverse_lazy('passbook_admin:sources') | ||||||
|     success_message = _('Successfully created Source') |     success_message = _('Successfully created Source') | ||||||
| @ -46,10 +60,13 @@ class SourceCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | |||||||
|         return path_to_class(model.form) |         return path_to_class(model.form) | ||||||
|  |  | ||||||
|  |  | ||||||
| class SourceUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class SourceUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        PermissionRequiredMixin, UpdateView): | ||||||
|     """Update source""" |     """Update source""" | ||||||
|  |  | ||||||
|     model = Source |     model = Source | ||||||
|  |     permission_required = 'passbook_core.change_source' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:sources') |     success_url = reverse_lazy('passbook_admin:sources') | ||||||
|     success_message = _('Successfully updated Source') |     success_message = _('Successfully updated Source') | ||||||
| @ -63,10 +80,13 @@ class SourceUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | |||||||
|         return Source.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() |         return Source.objects.filter(pk=self.kwargs.get('pk')).select_subclasses().first() | ||||||
|  |  | ||||||
|  |  | ||||||
| class SourceDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class SourceDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                        PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete source""" |     """Delete source""" | ||||||
|  |  | ||||||
|     model = Source |     model = Source | ||||||
|  |     permission_required = 'passbook_core.delete_source' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:sources') |     success_url = reverse_lazy('passbook_admin:sources') | ||||||
|     success_message = _('Successfully deleted Source') |     success_message = _('Successfully deleted Source') | ||||||
|  | |||||||
| @ -1,50 +1,66 @@ | |||||||
| """passbook User administration""" | """passbook User administration""" | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|  | from django.contrib.auth.mixins import \ | ||||||
|  |     PermissionRequiredMixin as DjangoPermissionRequiredMixin | ||||||
| from django.contrib.messages.views import SuccessMessageMixin | from django.contrib.messages.views import SuccessMessageMixin | ||||||
| from django.shortcuts import get_object_or_404, redirect | from django.shortcuts import redirect | ||||||
| from django.urls import reverse, reverse_lazy | from django.urls import reverse, reverse_lazy | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.views import View | from django.views.generic import DeleteView, DetailView, ListView, UpdateView | ||||||
| from django.views.generic import CreateView, DeleteView, ListView, UpdateView | from guardian.mixins import PermissionListMixin, PermissionRequiredMixin | ||||||
|  |  | ||||||
| from passbook.admin.forms.users import UserForm | from passbook.admin.forms.users import UserForm | ||||||
| from passbook.admin.mixins import AdminRequiredMixin |  | ||||||
| from passbook.core.models import Nonce, User | from passbook.core.models import Nonce, User | ||||||
|  | from passbook.lib.views import CreateAssignPermView | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserListView(AdminRequiredMixin, ListView): | class UserListView(LoginRequiredMixin, PermissionListMixin, ListView): | ||||||
|     """Show list of all users""" |     """Show list of all users""" | ||||||
|  |  | ||||||
|     model = User |     model = User | ||||||
|  |     permission_required = 'passbook_core.view_user' | ||||||
|     template_name = 'administration/user/list.html' |     template_name = 'administration/user/list.html' | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserCreateView(SuccessMessageMixin, AdminRequiredMixin, CreateView): | class UserCreateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                      DjangoPermissionRequiredMixin, CreateAssignPermView): | ||||||
|     """Create user""" |     """Create user""" | ||||||
|  |  | ||||||
|     model = User |     model = User | ||||||
|     form_class = UserForm |     form_class = UserForm | ||||||
|  |     permission_required = 'passbook_core.add_user' | ||||||
|  |     permissions = [ | ||||||
|  |         'passbook_core.view_user', | ||||||
|  |         'passbook_core.change_user', | ||||||
|  |         'passbook_core.delete_user', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     template_name = 'generic/create.html' |     template_name = 'generic/create.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:users') |     success_url = reverse_lazy('passbook_admin:users') | ||||||
|     success_message = _('Successfully created User') |     success_message = _('Successfully created User') | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserUpdateView(SuccessMessageMixin, AdminRequiredMixin, UpdateView): | class UserUpdateView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                      PermissionRequiredMixin, UpdateView): | ||||||
|     """Update user""" |     """Update user""" | ||||||
|  |  | ||||||
|     model = User |     model = User | ||||||
|     form_class = UserForm |     form_class = UserForm | ||||||
|  |     permission_required = 'passbook_core.change_user' | ||||||
|  |  | ||||||
|     template_name = 'generic/update.html' |     template_name = 'generic/update.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:users') |     success_url = reverse_lazy('passbook_admin:users') | ||||||
|     success_message = _('Successfully updated User') |     success_message = _('Successfully updated User') | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | class UserDeleteView(SuccessMessageMixin, LoginRequiredMixin, | ||||||
|  |                      PermissionRequiredMixin, DeleteView): | ||||||
|     """Delete user""" |     """Delete user""" | ||||||
|  |  | ||||||
|     model = User |     model = User | ||||||
|  |     permission_required = 'passbook_core.delete_user' | ||||||
|  |  | ||||||
|     template_name = 'generic/delete.html' |     template_name = 'generic/delete.html' | ||||||
|     success_url = reverse_lazy('passbook_admin:users') |     success_url = reverse_lazy('passbook_admin:users') | ||||||
|     success_message = _('Successfully deleted User') |     success_message = _('Successfully deleted User') | ||||||
| @ -54,14 +70,16 @@ class UserDeleteView(SuccessMessageMixin, AdminRequiredMixin, DeleteView): | |||||||
|         return super().delete(request, *args, **kwargs) |         return super().delete(request, *args, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserPasswordResetView(AdminRequiredMixin, View): | class UserPasswordResetView(LoginRequiredMixin, PermissionRequiredMixin, DetailView): | ||||||
|     """Get Password reset link for user""" |     """Get Password reset link for user""" | ||||||
|  |  | ||||||
|     # pylint: disable=invalid-name |     model = User | ||||||
|     def get(self, request, pk): |     permission_required = 'passbook_core.reset_user_password' | ||||||
|  |  | ||||||
|  |     def get(self, request, *args, **kwargs): | ||||||
|         """Create nonce for user and return link""" |         """Create nonce for user and return link""" | ||||||
|         user = get_object_or_404(User, pk=pk) |         super().get(request, *args, **kwargs) | ||||||
|         nonce = Nonce.objects.create(user=user) |         nonce = Nonce.objects.create(user=self.object) | ||||||
|         link = request.build_absolute_uri(reverse( |         link = request.build_absolute_uri(reverse( | ||||||
|             'passbook_core:auth-password-reset', kwargs={'nonce': nonce.uuid})) |             'passbook_core:auth-password-reset', kwargs={'nonce': nonce.uuid})) | ||||||
|         messages.success(request, _('Password reset link: <pre>%(link)s</pre>' % {'link': link})) |         messages.success(request, _('Password reset link: <pre>%(link)s</pre>' % {'link': link})) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Langhammer, Jens
					Langhammer, Jens