1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Transition ObjectDeleteView to use ObjectPermissionRequiredMixin

This commit is contained in:
Jeremy Stretch
2020-05-21 14:34:40 -04:00
parent 5381c4e0ae
commit 2b32430a10
8 changed files with 53 additions and 93 deletions

View File

@ -3,7 +3,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import permission_required
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.db import transaction
from django.db.models import Count, OuterRef, Subquery
from django.db.models import Count, OuterRef
from django.shortcuts import get_object_or_404, redirect, render
from django.views.generic import View
from django_tables2 import RequestConfig
@ -66,8 +66,7 @@ class ProviderEditView(ObjectEditView):
default_return_url = 'circuits:provider_list'
class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'circuits.delete_provider'
class ProviderDeleteView(ObjectDeleteView):
queryset = Provider.objects.all()
default_return_url = 'circuits:provider_list'
@ -172,8 +171,7 @@ class CircuitEditView(ObjectEditView):
default_return_url = 'circuits:circuit_list'
class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'circuits.delete_circuit'
class CircuitDeleteView(ObjectDeleteView):
queryset = Circuit.objects.all()
default_return_url = 'circuits:circuit_list'
@ -270,6 +268,5 @@ class CircuitTerminationEditView(ObjectEditView):
return obj.circuit.get_absolute_url()
class CircuitTerminationDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'circuits.delete_circuittermination'
class CircuitTerminationDeleteView(ObjectDeleteView):
queryset = CircuitTermination.objects.all()

View File

@ -220,8 +220,7 @@ class SiteEditView(ObjectEditView):
default_return_url = 'dcim:site_list'
class SiteDeleteView(ObjectPermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_site'
class SiteDeleteView(ObjectDeleteView):
queryset = Site.objects.all()
default_return_url = 'dcim:site_list'
@ -411,8 +410,7 @@ class RackEditView(ObjectEditView):
default_return_url = 'dcim:rack_list'
class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_rack'
class RackDeleteView(ObjectDeleteView):
queryset = Rack.objects.all()
default_return_url = 'dcim:rack_list'
@ -480,8 +478,7 @@ class RackReservationEditView(ObjectEditView):
return obj
class RackReservationDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_rackreservation'
class RackReservationDeleteView(ObjectDeleteView):
queryset = RackReservation.objects.all()
default_return_url = 'dcim:rackreservation_list'
@ -636,8 +633,7 @@ class DeviceTypeEditView(ObjectEditView):
default_return_url = 'dcim:devicetype_list'
class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_devicetype'
class DeviceTypeDeleteView(ObjectDeleteView):
queryset = DeviceType.objects.all()
default_return_url = 'dcim:devicetype_list'
@ -703,8 +699,7 @@ class ConsolePortTemplateEditView(ObjectEditView):
model_form = forms.ConsolePortTemplateForm
class ConsolePortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_consoleporttemplate'
class ConsolePortTemplateDeleteView(ObjectDeleteView):
queryset = ConsolePortTemplate.objects.all()
@ -738,8 +733,7 @@ class ConsoleServerPortTemplateEditView(ObjectEditView):
model_form = forms.ConsoleServerPortTemplateForm
class ConsoleServerPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_consoleserverporttemplate'
class ConsoleServerPortTemplateDeleteView(ObjectDeleteView):
queryset = ConsoleServerPortTemplate.objects.all()
@ -773,8 +767,7 @@ class PowerPortTemplateEditView(ObjectEditView):
model_form = forms.PowerPortTemplateForm
class PowerPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_powerporttemplate'
class PowerPortTemplateDeleteView(ObjectDeleteView):
queryset = PowerPortTemplate.objects.all()
@ -808,8 +801,7 @@ class PowerOutletTemplateEditView(ObjectEditView):
model_form = forms.PowerOutletTemplateForm
class PowerOutletTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_poweroutlettemplate'
class PowerOutletTemplateDeleteView(ObjectDeleteView):
queryset = PowerOutletTemplate.objects.all()
@ -843,8 +835,7 @@ class InterfaceTemplateEditView(ObjectEditView):
model_form = forms.InterfaceTemplateForm
class InterfaceTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_interfacetemplate'
class InterfaceTemplateDeleteView(ObjectDeleteView):
queryset = InterfaceTemplate.objects.all()
@ -878,8 +869,7 @@ class FrontPortTemplateEditView(ObjectEditView):
model_form = forms.FrontPortTemplateForm
class FrontPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_frontporttemplate'
class FrontPortTemplateDeleteView(ObjectDeleteView):
queryset = FrontPortTemplate.objects.all()
@ -913,8 +903,7 @@ class RearPortTemplateEditView(ObjectEditView):
model_form = forms.RearPortTemplateForm
class RearPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_rearporttemplate'
class RearPortTemplateDeleteView(ObjectDeleteView):
queryset = RearPortTemplate.objects.all()
@ -948,8 +937,7 @@ class DeviceBayTemplateEditView(ObjectEditView):
model_form = forms.DeviceBayTemplateForm
class DeviceBayTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_devicebaytemplate'
class DeviceBayTemplateDeleteView(ObjectDeleteView):
queryset = DeviceBayTemplate.objects.all()
@ -1193,8 +1181,7 @@ class DeviceEditView(ObjectEditView):
default_return_url = 'dcim:device_list'
class DeviceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_device'
class DeviceDeleteView(ObjectDeleteView):
queryset = Device.objects.all()
default_return_url = 'dcim:device_list'
@ -1270,8 +1257,7 @@ class ConsolePortEditView(ObjectEditView):
model_form = forms.ConsolePortForm
class ConsolePortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_consoleport'
class ConsolePortDeleteView(ObjectDeleteView):
queryset = ConsolePort.objects.all()
@ -1324,8 +1310,7 @@ class ConsoleServerPortEditView(ObjectEditView):
model_form = forms.ConsoleServerPortForm
class ConsoleServerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_consoleserverport'
class ConsoleServerPortDeleteView(ObjectDeleteView):
queryset = ConsoleServerPort.objects.all()
@ -1390,8 +1375,7 @@ class PowerPortEditView(ObjectEditView):
model_form = forms.PowerPortForm
class PowerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_powerport'
class PowerPortDeleteView(ObjectDeleteView):
queryset = PowerPort.objects.all()
@ -1444,8 +1428,7 @@ class PowerOutletEditView(ObjectEditView):
model_form = forms.PowerOutletForm
class PowerOutletDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_poweroutlet'
class PowerOutletDeleteView(ObjectDeleteView):
queryset = PowerOutlet.objects.all()
@ -1547,8 +1530,7 @@ class InterfaceEditView(ObjectEditView):
template_name = 'dcim/interface_edit.html'
class InterfaceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_interface'
class InterfaceDeleteView(ObjectDeleteView):
queryset = Interface.objects.all()
@ -1613,8 +1595,7 @@ class FrontPortEditView(ObjectEditView):
model_form = forms.FrontPortForm
class FrontPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_frontport'
class FrontPortDeleteView(ObjectDeleteView):
queryset = FrontPort.objects.all()
@ -1679,8 +1660,7 @@ class RearPortEditView(ObjectEditView):
model_form = forms.RearPortForm
class RearPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_rearport'
class RearPortDeleteView(ObjectDeleteView):
queryset = RearPort.objects.all()
@ -1747,8 +1727,7 @@ class DeviceBayEditView(ObjectEditView):
model_form = forms.DeviceBayForm
class DeviceBayDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_devicebay'
class DeviceBayDeleteView(ObjectDeleteView):
queryset = DeviceBay.objects.all()
@ -2088,8 +2067,7 @@ class CableEditView(ObjectEditView):
default_return_url = 'dcim:cable_list'
class CableDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_cable'
class CableDeleteView(ObjectDeleteView):
queryset = Cable.objects.all()
default_return_url = 'dcim:cable_list'
@ -2247,8 +2225,7 @@ class InventoryItemCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html'
class InventoryItemDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_inventoryitem'
class InventoryItemDeleteView(ObjectDeleteView):
queryset = InventoryItem.objects.all()
@ -2420,8 +2397,7 @@ class VirtualChassisEditView(PermissionRequiredMixin, GetReturnURLMixin, View):
})
class VirtualChassisDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_virtualchassis'
class VirtualChassisDeleteView(ObjectDeleteView):
queryset = VirtualChassis.objects.all()
default_return_url = 'dcim:device_list'
@ -2583,8 +2559,7 @@ class PowerPanelEditView(ObjectEditView):
default_return_url = 'dcim:powerpanel_list'
class PowerPanelDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_powerpanel'
class PowerPanelDeleteView(ObjectDeleteView):
queryset = PowerPanel.objects.all()
default_return_url = 'dcim:powerpanel_list'
@ -2650,8 +2625,7 @@ class PowerFeedEditView(ObjectEditView):
default_return_url = 'dcim:powerfeed_list'
class PowerFeedDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_powerfeed'
class PowerFeedDeleteView(ObjectDeleteView):
queryset = PowerFeed.objects.all()
default_return_url = 'dcim:powerfeed_list'

View File

@ -71,8 +71,7 @@ class TagEditView(ObjectEditView):
template_name = 'extras/tag_edit.html'
class TagDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'extras.delete_tag'
class TagDeleteView(ObjectDeleteView):
queryset = Tag.objects.all()
default_return_url = 'extras:tag_list'
@ -147,8 +146,7 @@ class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView):
default_return_url = 'extras:configcontext_list'
class ConfigContextDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'extras.delete_configcontext'
class ConfigContextDeleteView(ObjectDeleteView):
queryset = ConfigContext.objects.all()
default_return_url = 'extras:configcontext_list'
@ -310,8 +308,7 @@ class ImageAttachmentEditView(ObjectEditView):
return imageattachment.parent.get_absolute_url()
class ImageAttachmentDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'extras.delete_imageattachment'
class ImageAttachmentDeleteView(ObjectDeleteView):
queryset = ImageAttachment.objects.all()
def get_return_url(self, request, imageattachment):

View File

@ -141,8 +141,7 @@ class VRFEditView(ObjectEditView):
default_return_url = 'ipam:vrf_list'
class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_vrf'
class VRFDeleteView(ObjectDeleteView):
queryset = VRF.objects.all()
default_return_url = 'ipam:vrf_list'
@ -356,8 +355,7 @@ class AggregateEditView(ObjectEditView):
default_return_url = 'ipam:aggregate_list'
class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_aggregate'
class AggregateDeleteView(ObjectDeleteView):
queryset = Aggregate.objects.all()
default_return_url = 'ipam:aggregate_list'
@ -572,8 +570,7 @@ class PrefixEditView(ObjectEditView):
default_return_url = 'ipam:prefix_list'
class PrefixDeleteView(ObjectPermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_prefix'
class PrefixDeleteView(ObjectDeleteView):
queryset = Prefix.objects.all()
template_name = 'ipam/prefix_delete.html'
default_return_url = 'ipam:prefix_list'
@ -733,8 +730,7 @@ class IPAddressAssignView(PermissionRequiredMixin, View):
})
class IPAddressDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_ipaddress'
class IPAddressDeleteView(ObjectDeleteView):
queryset = IPAddress.objects.all()
default_return_url = 'ipam:ipaddress_list'
@ -903,8 +899,7 @@ class VLANEditView(ObjectEditView):
default_return_url = 'ipam:vlan_list'
class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_vlan'
class VLANDeleteView(ObjectDeleteView):
queryset = VLAN.objects.all()
default_return_url = 'ipam:vlan_list'
@ -982,8 +977,7 @@ class ServiceBulkImportView(PermissionRequiredMixin, BulkImportView):
default_return_url = 'ipam:service_list'
class ServiceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_service'
class ServiceDeleteView(ObjectDeleteView):
queryset = Service.objects.all()

View File

@ -183,8 +183,7 @@ def secret_edit(request, pk):
})
class SecretDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'secrets.delete_secret'
class SecretDeleteView(ObjectDeleteView):
queryset = Secret.objects.all()
default_return_url = 'secrets:secret_list'

View File

@ -94,8 +94,7 @@ class TenantEditView(ObjectEditView):
default_return_url = 'tenancy:tenant_list'
class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'tenancy.delete_tenant'
class TenantDeleteView(ObjectDeleteView):
queryset = Tenant.objects.all()
default_return_url = 'tenancy:tenant_list'

View File

@ -282,9 +282,9 @@ class ObjectEditView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
"""
Create or edit a single object.
queryset: The base queryset for the object being modified
model_form: The form used to create or edit the object
template_name: The name of the template
:param queryset: The base queryset for the object being modified
:param model_form: The form used to create or edit the object
:param template_name: The name of the template
"""
queryset = None
model_form = None
@ -389,16 +389,19 @@ class ObjectEditView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
})
class ObjectDeleteView(GetReturnURLMixin, View):
class ObjectDeleteView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
"""
Delete a single object.
queryset: The base queryset for the object being deleted
template_name: The name of the template
:param queryset: The base queryset for the object being deleted
:param template_name: The name of the template
"""
queryset = None
template_name = 'utilities/obj_delete.html'
def get_required_permission(self):
return get_permission_for_model(self.queryset.model, 'delete')
def get_object(self, kwargs):
# Look up object by slug if one has been provided. Otherwise, use PK.
if 'slug' in kwargs:

View File

@ -114,8 +114,7 @@ class ClusterEditView(ObjectEditView):
model_form = forms.ClusterForm
class ClusterDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'virtualization.delete_cluster'
class ClusterDeleteView(ObjectDeleteView):
queryset = Cluster.objects.all()
default_return_url = 'virtualization:cluster_list'
@ -270,8 +269,7 @@ class VirtualMachineEditView(ObjectEditView):
default_return_url = 'virtualization:virtualmachine_list'
class VirtualMachineDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'virtualization.delete_virtualmachine'
class VirtualMachineDeleteView(ObjectDeleteView):
queryset = VirtualMachine.objects.all()
default_return_url = 'virtualization:virtualmachine_list'
@ -319,8 +317,7 @@ class InterfaceEditView(ObjectEditView):
template_name = 'virtualization/interface_edit.html'
class InterfaceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_interface'
class InterfaceDeleteView(ObjectDeleteView):
queryset = Interface.objects.all()