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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -282,9 +282,9 @@ class ObjectEditView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
""" """
Create or edit a single object. Create or edit a single object.
queryset: The base queryset for the object being modified :param queryset: The base queryset for the object being modified
model_form: The form used to create or edit the object :param model_form: The form used to create or edit the object
template_name: The name of the template :param template_name: The name of the template
""" """
queryset = None queryset = None
model_form = 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. Delete a single object.
queryset: The base queryset for the object being deleted :param queryset: The base queryset for the object being deleted
template_name: The name of the template :param template_name: The name of the template
""" """
queryset = None queryset = None
template_name = 'utilities/obj_delete.html' 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): def get_object(self, kwargs):
# Look up object by slug if one has been provided. Otherwise, use PK. # Look up object by slug if one has been provided. Otherwise, use PK.
if 'slug' in kwargs: if 'slug' in kwargs:

View File

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