Sfoglia il codice sorgente

Transition ObjectDeleteView to use ObjectPermissionRequiredMixin

Jeremy Stretch 5 anni fa
parent
commit
2b32430a10

+ 4 - 7
netbox/circuits/views.py

@@ -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()

+ 26 - 52
netbox/dcim/views.py

@@ -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'
 

+ 3 - 6
netbox/extras/views.py

@@ -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):

+ 6 - 12
netbox/ipam/views.py

@@ -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()
 
 

+ 1 - 2
netbox/secrets/views.py

@@ -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'
 

+ 1 - 2
netbox/tenancy/views.py

@@ -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'
 

+ 9 - 6
netbox/utilities/views.py

@@ -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:

+ 3 - 6
netbox/virtualization/views.py

@@ -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()