admin(major): rewrite all views to use guardian mixins
This commit is contained in:
parent
3185a86b22
commit
c9714893bb
|
@ -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 a new issue