Transition BulkRenameView, BulkDisconnectView to use ObjectPermissionRequiredMixin

This commit is contained in:
Jeremy Stretch 2020-05-21 16:11:46 -04:00
parent af8e1a6472
commit 49b780358e

View File

@ -23,6 +23,7 @@ from ipam.models import Prefix, VLAN
from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
from utilities.forms import ConfirmationForm from utilities.forms import ConfirmationForm
from utilities.paginator import EnhancedPaginator from utilities.paginator import EnhancedPaginator
from utilities.permissions import get_permission_for_model
from utilities.utils import csv_format from utilities.utils import csv_format
from utilities.views import ( from utilities.views import (
BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, GetReturnURLMixin, BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, GetReturnURLMixin,
@ -41,7 +42,7 @@ from .models import (
) )
class BulkRenameView(GetReturnURLMixin, View): class BulkRenameView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
""" """
An extendable view for renaming device components in bulk. An extendable view for renaming device components in bulk.
""" """
@ -49,9 +50,10 @@ class BulkRenameView(GetReturnURLMixin, View):
form = None form = None
template_name = 'dcim/bulk_rename.html' template_name = 'dcim/bulk_rename.html'
def post(self, request): def get_required_permission(self):
return get_permission_for_model(self.queryset.model, 'change')
model = self.queryset.model def post(self, request):
if '_preview' in request.POST or '_apply' in request.POST: if '_preview' in request.POST or '_apply' in request.POST:
form = self.form(request.POST, initial={'pk': request.POST.getlist('pk')}) form = self.form(request.POST, initial={'pk': request.POST.getlist('pk')})
@ -76,7 +78,7 @@ class BulkRenameView(GetReturnURLMixin, View):
obj.save() obj.save()
messages.success(request, "Renamed {} {}".format( messages.success(request, "Renamed {} {}".format(
len(selected_objects), len(selected_objects),
model._meta.verbose_name_plural self.queryset.model._meta.verbose_name_plural
)) ))
return redirect(self.get_return_url(request)) return redirect(self.get_return_url(request))
@ -86,7 +88,7 @@ class BulkRenameView(GetReturnURLMixin, View):
return render(request, self.template_name, { return render(request, self.template_name, {
'form': form, 'form': form,
'obj_type_plural': model._meta.verbose_name_plural, 'obj_type_plural': self.queryset.model._meta.verbose_name_plural,
'selected_objects': selected_objects, 'selected_objects': selected_objects,
'return_url': self.get_return_url(request), 'return_url': self.get_return_url(request),
}) })
@ -96,10 +98,13 @@ class BulkDisconnectView(GetReturnURLMixin, View):
""" """
An extendable view for disconnection console/power/interface components in bulk. An extendable view for disconnection console/power/interface components in bulk.
""" """
model = None queryset = None
form = None form = None
template_name = 'dcim/bulk_disconnect.html' template_name = 'dcim/bulk_disconnect.html'
def get_required_permission(self):
return get_permission_for_model(self.queryset.model, 'change')
def post(self, request): def post(self, request):
selected_objects = [] selected_objects = []
@ -113,25 +118,25 @@ class BulkDisconnectView(GetReturnURLMixin, View):
with transaction.atomic(): with transaction.atomic():
count = 0 count = 0
for obj in self.model.objects.filter(pk__in=form.cleaned_data['pk']): for obj in self.queryset.filter(pk__in=form.cleaned_data['pk']):
if obj.cable is None: if obj.cable is None:
continue continue
obj.cable.delete() obj.cable.delete()
count += 1 count += 1
messages.success(request, "Disconnected {} {}".format( messages.success(request, "Disconnected {} {}".format(
count, self.model._meta.verbose_name_plural count, self.queryset.model._meta.verbose_name_plural
)) ))
return redirect(return_url) return redirect(return_url)
else: else:
form = self.form(initial={'pk': request.POST.getlist('pk')}) form = self.form(initial={'pk': request.POST.getlist('pk')})
selected_objects = self.model.objects.filter(pk__in=form.initial['pk']) selected_objects = self.queryset.filter(pk__in=form.initial['pk'])
return render(request, self.template_name, { return render(request, self.template_name, {
'form': form, 'form': form,
'obj_type_plural': self.model._meta.verbose_name_plural, 'obj_type_plural': self.queryset.model._meta.verbose_name_plural,
'selected_objects': selected_objects, 'selected_objects': selected_objects,
'return_url': return_url, 'return_url': return_url,
}) })
@ -1285,15 +1290,13 @@ class ConsoleServerPortBulkEditView(BulkEditView):
form = forms.ConsoleServerPortBulkEditForm form = forms.ConsoleServerPortBulkEditForm
class ConsoleServerPortBulkRenameView(PermissionRequiredMixin, BulkRenameView): class ConsoleServerPortBulkRenameView(BulkRenameView):
permission_required = 'dcim.change_consoleserverport'
queryset = ConsoleServerPort.objects.all() queryset = ConsoleServerPort.objects.all()
form = forms.ConsoleServerPortBulkRenameForm form = forms.ConsoleServerPortBulkRenameForm
class ConsoleServerPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class ConsoleServerPortBulkDisconnectView(BulkDisconnectView):
permission_required = 'dcim.change_consoleserverport' queryset = ConsoleServerPort.objects.all()
model = ConsoleServerPort
form = forms.ConsoleServerPortBulkDisconnectForm form = forms.ConsoleServerPortBulkDisconnectForm
@ -1397,15 +1400,13 @@ class PowerOutletBulkEditView(BulkEditView):
form = forms.PowerOutletBulkEditForm form = forms.PowerOutletBulkEditForm
class PowerOutletBulkRenameView(PermissionRequiredMixin, BulkRenameView): class PowerOutletBulkRenameView(BulkRenameView):
permission_required = 'dcim.change_poweroutlet'
queryset = PowerOutlet.objects.all() queryset = PowerOutlet.objects.all()
form = forms.PowerOutletBulkRenameForm form = forms.PowerOutletBulkRenameForm
class PowerOutletBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class PowerOutletBulkDisconnectView(BulkDisconnectView):
permission_required = 'dcim.change_poweroutlet' queryset = PowerOutlet.objects.all()
model = PowerOutlet
form = forms.PowerOutletBulkDisconnectForm form = forms.PowerOutletBulkDisconnectForm
@ -1496,15 +1497,13 @@ class InterfaceBulkEditView(BulkEditView):
form = forms.InterfaceBulkEditForm form = forms.InterfaceBulkEditForm
class InterfaceBulkRenameView(PermissionRequiredMixin, BulkRenameView): class InterfaceBulkRenameView(BulkRenameView):
permission_required = 'dcim.change_interface'
queryset = Interface.objects.all() queryset = Interface.objects.all()
form = forms.InterfaceBulkRenameForm form = forms.InterfaceBulkRenameForm
class InterfaceBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class InterfaceBulkDisconnectView(BulkDisconnectView):
permission_required = 'dcim.change_interface' queryset = Interface.objects.all()
model = Interface
form = forms.InterfaceBulkDisconnectForm form = forms.InterfaceBulkDisconnectForm
@ -1558,15 +1557,13 @@ class FrontPortBulkEditView(BulkEditView):
form = forms.FrontPortBulkEditForm form = forms.FrontPortBulkEditForm
class FrontPortBulkRenameView(PermissionRequiredMixin, BulkRenameView): class FrontPortBulkRenameView(BulkRenameView):
permission_required = 'dcim.change_frontport'
queryset = FrontPort.objects.all() queryset = FrontPort.objects.all()
form = forms.FrontPortBulkRenameForm form = forms.FrontPortBulkRenameForm
class FrontPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class FrontPortBulkDisconnectView(BulkDisconnectView):
permission_required = 'dcim.change_frontport' queryset = FrontPort.objects.all()
model = FrontPort
form = forms.FrontPortBulkDisconnectForm form = forms.FrontPortBulkDisconnectForm
@ -1620,15 +1617,13 @@ class RearPortBulkEditView(BulkEditView):
form = forms.RearPortBulkEditForm form = forms.RearPortBulkEditForm
class RearPortBulkRenameView(PermissionRequiredMixin, BulkRenameView): class RearPortBulkRenameView(BulkRenameView):
permission_required = 'dcim.change_rearport'
queryset = RearPort.objects.all() queryset = RearPort.objects.all()
form = forms.RearPortBulkRenameForm form = forms.RearPortBulkRenameForm
class RearPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class RearPortBulkDisconnectView(BulkDisconnectView):
permission_required = 'dcim.change_rearport' queryset = RearPort.objects.all()
model = RearPort
form = forms.RearPortBulkDisconnectForm form = forms.RearPortBulkDisconnectForm
@ -1753,8 +1748,7 @@ class DeviceBayBulkEditView(BulkEditView):
form = forms.DeviceBayBulkEditForm form = forms.DeviceBayBulkEditForm
class DeviceBayBulkRenameView(PermissionRequiredMixin, BulkRenameView): class DeviceBayBulkRenameView(BulkRenameView):
permission_required = 'dcim.change_devicebay'
queryset = DeviceBay.objects.all() queryset = DeviceBay.objects.all()
form = forms.DeviceBayBulkRenameForm form = forms.DeviceBayBulkRenameForm