From 5e5038d7808870347dc07c22c3ab693368fcf783 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 21 May 2020 14:43:27 -0400 Subject: [PATCH] Transition BulkImportView to use ObjectPermissionRequiredMixin --- netbox/circuits/views.py | 9 ++--- netbox/dcim/views.py | 69 ++++++++++++---------------------- netbox/ipam/views.py | 27 +++++-------- netbox/secrets/views.py | 4 +- netbox/tenancy/views.py | 6 +-- netbox/utilities/views.py | 5 ++- netbox/virtualization/views.py | 12 ++---- 7 files changed, 46 insertions(+), 86 deletions(-) diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 7016a5b9d..7ee6a7dc1 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -71,8 +71,7 @@ class ProviderDeleteView(ObjectDeleteView): default_return_url = 'circuits:provider_list' -class ProviderBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'circuits.add_provider' +class ProviderBulkImportView(BulkImportView): queryset = Provider.objects.all() model_form = forms.ProviderCSVForm table = tables.ProviderTable @@ -111,8 +110,7 @@ class CircuitTypeEditView(ObjectEditView): default_return_url = 'circuits:circuittype_list' -class CircuitTypeBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'circuits.add_circuittype' +class CircuitTypeBulkImportView(BulkImportView): queryset = CircuitType.objects.all() model_form = forms.CircuitTypeCSVForm table = tables.CircuitTypeTable @@ -176,8 +174,7 @@ class CircuitDeleteView(ObjectDeleteView): default_return_url = 'circuits:circuit_list' -class CircuitBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'circuits.add_circuit' +class CircuitBulkImportView(BulkImportView): queryset = Circuit.objects.all() model_form = forms.CircuitCSVForm table = tables.CircuitTable diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index d61d0f82f..d1882359d 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -160,8 +160,7 @@ class RegionEditView(ObjectEditView): default_return_url = 'dcim:region_list' -class RegionBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_region' +class RegionBulkImportView(BulkImportView): queryset = Region.objects.all() model_form = forms.RegionCSVForm table = tables.RegionTable @@ -225,8 +224,7 @@ class SiteDeleteView(ObjectDeleteView): default_return_url = 'dcim:site_list' -class SiteBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_site' +class SiteBulkImportView(BulkImportView): queryset = Site.objects.all() model_form = forms.SiteCSVForm table = tables.SiteTable @@ -273,8 +271,7 @@ class RackGroupEditView(ObjectEditView): default_return_url = 'dcim:rackgroup_list' -class RackGroupBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_rackgroup' +class RackGroupBulkImportView(BulkImportView): queryset = RackGroup.objects.all() model_form = forms.RackGroupCSVForm table = tables.RackGroupTable @@ -304,8 +301,7 @@ class RackRoleEditView(ObjectEditView): default_return_url = 'dcim:rackrole_list' -class RackRoleBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_rackrole' +class RackRoleBulkImportView(BulkImportView): queryset = RackRole.objects.all() model_form = forms.RackRoleCSVForm table = tables.RackRoleTable @@ -415,8 +411,7 @@ class RackDeleteView(ObjectDeleteView): default_return_url = 'dcim:rack_list' -class RackBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_rack' +class RackBulkImportView(BulkImportView): queryset = Rack.objects.all() model_form = forms.RackCSVForm table = tables.RackTable @@ -483,8 +478,7 @@ class RackReservationDeleteView(ObjectDeleteView): default_return_url = 'dcim:rackreservation_list' -class RackReservationImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_rackreservation' +class RackReservationImportView(BulkImportView): queryset = RackReservation.objects.all() model_form = forms.RackReservationCSVForm table = tables.RackReservationTable @@ -537,8 +531,7 @@ class ManufacturerEditView(ObjectEditView): default_return_url = 'dcim:manufacturer_list' -class ManufacturerBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_manufacturer' +class ManufacturerBulkImportView(BulkImportView): queryset = Manufacturer.objects.all() model_form = forms.ManufacturerCSVForm table = tables.ManufacturerTable @@ -969,8 +962,7 @@ class DeviceRoleEditView(ObjectEditView): default_return_url = 'dcim:devicerole_list' -class DeviceRoleBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_devicerole' +class DeviceRoleBulkImportView(BulkImportView): queryset = DeviceRole.objects.all() model_form = forms.DeviceRoleCSVForm table = tables.DeviceRoleTable @@ -999,8 +991,7 @@ class PlatformEditView(ObjectEditView): default_return_url = 'dcim:platform_list' -class PlatformBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_platform' +class PlatformBulkImportView(BulkImportView): queryset = Platform.objects.all() model_form = forms.PlatformCSVForm table = tables.PlatformTable @@ -1186,8 +1177,7 @@ class DeviceDeleteView(ObjectDeleteView): default_return_url = 'dcim:device_list' -class DeviceBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_device' +class DeviceBulkImportView(BulkImportView): queryset = Device.objects.all() model_form = forms.DeviceCSVForm table = tables.DeviceImportTable @@ -1195,8 +1185,7 @@ class DeviceBulkImportView(PermissionRequiredMixin, BulkImportView): default_return_url = 'dcim:device_list' -class ChildDeviceBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_device' +class ChildDeviceBulkImportView(BulkImportView): queryset = Device.objects.all() model_form = forms.ChildDeviceCSVForm table = tables.DeviceImportTable @@ -1261,8 +1250,7 @@ class ConsolePortDeleteView(ObjectDeleteView): queryset = ConsolePort.objects.all() -class ConsolePortBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_consoleport' +class ConsolePortBulkImportView(BulkImportView): queryset = ConsolePort.objects.all() model_form = forms.ConsolePortCSVForm table = tables.ConsolePortImportTable @@ -1314,8 +1302,7 @@ class ConsoleServerPortDeleteView(ObjectDeleteView): queryset = ConsoleServerPort.objects.all() -class ConsoleServerPortBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_consoleserverport' +class ConsoleServerPortBulkImportView(BulkImportView): queryset = ConsoleServerPort.objects.all() model_form = forms.ConsoleServerPortCSVForm table = tables.ConsoleServerPortImportTable @@ -1379,8 +1366,7 @@ class PowerPortDeleteView(ObjectDeleteView): queryset = PowerPort.objects.all() -class PowerPortBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_powerport' +class PowerPortBulkImportView(BulkImportView): queryset = PowerPort.objects.all() model_form = forms.PowerPortCSVForm table = tables.PowerPortImportTable @@ -1432,8 +1418,7 @@ class PowerOutletDeleteView(ObjectDeleteView): queryset = PowerOutlet.objects.all() -class PowerOutletBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_poweroutlet' +class PowerOutletBulkImportView(BulkImportView): queryset = PowerOutlet.objects.all() model_form = forms.PowerOutletCSVForm table = tables.PowerOutletImportTable @@ -1534,8 +1519,7 @@ class InterfaceDeleteView(ObjectDeleteView): queryset = Interface.objects.all() -class InterfaceBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_interface' +class InterfaceBulkImportView(BulkImportView): queryset = Interface.objects.all() model_form = forms.InterfaceCSVForm table = tables.InterfaceImportTable @@ -1599,8 +1583,7 @@ class FrontPortDeleteView(ObjectDeleteView): queryset = FrontPort.objects.all() -class FrontPortBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_frontport' +class FrontPortBulkImportView(BulkImportView): queryset = FrontPort.objects.all() model_form = forms.FrontPortCSVForm table = tables.FrontPortImportTable @@ -1664,8 +1647,7 @@ class RearPortDeleteView(ObjectDeleteView): queryset = RearPort.objects.all() -class RearPortBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_rearport' +class RearPortBulkImportView(BulkImportView): queryset = RearPort.objects.all() model_form = forms.RearPortCSVForm table = tables.RearPortImportTable @@ -1800,8 +1782,7 @@ class DeviceBayDepopulateView(PermissionRequiredMixin, View): }) -class DeviceBayBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_devicebay' +class DeviceBayBulkImportView(BulkImportView): queryset = DeviceBay.objects.all() model_form = forms.DeviceBayCSVForm table = tables.DeviceBayImportTable @@ -2072,8 +2053,7 @@ class CableDeleteView(ObjectDeleteView): default_return_url = 'dcim:cable_list' -class CableBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_cable' +class CableBulkImportView(BulkImportView): queryset = Cable.objects.all() model_form = forms.CableCSVForm table = tables.CableTable @@ -2229,8 +2209,7 @@ class InventoryItemDeleteView(ObjectDeleteView): queryset = InventoryItem.objects.all() -class InventoryItemBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_inventoryitem' +class InventoryItemBulkImportView(BulkImportView): queryset = InventoryItem.objects.all() model_form = forms.InventoryItemCSVForm table = tables.InventoryItemTable @@ -2564,8 +2543,7 @@ class PowerPanelDeleteView(ObjectDeleteView): default_return_url = 'dcim:powerpanel_list' -class PowerPanelBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_powerpanel' +class PowerPanelBulkImportView(BulkImportView): queryset = PowerPanel.objects.all() model_form = forms.PowerPanelCSVForm table = tables.PowerPanelTable @@ -2630,8 +2608,7 @@ class PowerFeedDeleteView(ObjectDeleteView): default_return_url = 'dcim:powerfeed_list' -class PowerFeedBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'dcim.add_powerfeed' +class PowerFeedBulkImportView(BulkImportView): queryset = PowerFeed.objects.all() model_form = forms.PowerFeedCSVForm table = tables.PowerFeedTable diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 176321982..dbd45b923 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -146,8 +146,7 @@ class VRFDeleteView(ObjectDeleteView): default_return_url = 'ipam:vrf_list' -class VRFBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_vrf' +class VRFBulkImportView(BulkImportView): queryset = VRF.objects.all() model_form = forms.VRFCSVForm table = tables.VRFTable @@ -257,8 +256,7 @@ class RIREditView(ObjectEditView): default_return_url = 'ipam:rir_list' -class RIRBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_rir' +class RIRBulkImportView(BulkImportView): queryset = RIR.objects.all() model_form = forms.RIRCSVForm table = tables.RIRTable @@ -360,8 +358,7 @@ class AggregateDeleteView(ObjectDeleteView): default_return_url = 'ipam:aggregate_list' -class AggregateBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_aggregate' +class AggregateBulkImportView(BulkImportView): queryset = Aggregate.objects.all() model_form = forms.AggregateCSVForm table = tables.AggregateTable @@ -400,8 +397,7 @@ class RoleEditView(ObjectEditView): default_return_url = 'ipam:role_list' -class RoleBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_role' +class RoleBulkImportView(BulkImportView): queryset = Role.objects.all() model_form = forms.RoleCSVForm table = tables.RoleTable @@ -576,8 +572,7 @@ class PrefixDeleteView(ObjectDeleteView): default_return_url = 'ipam:prefix_list' -class PrefixBulkImportView(ObjectPermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_prefix' +class PrefixBulkImportView(BulkImportView): queryset = Prefix.objects.all() model_form = forms.PrefixCSVForm table = tables.PrefixTable @@ -744,8 +739,7 @@ class IPAddressBulkCreateView(PermissionRequiredMixin, BulkCreateView): default_return_url = 'ipam:ipaddress_list' -class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_ipaddress' +class IPAddressBulkImportView(BulkImportView): queryset = IPAddress.objects.all() model_form = forms.IPAddressCSVForm table = tables.IPAddressTable @@ -787,8 +781,7 @@ class VLANGroupEditView(ObjectEditView): default_return_url = 'ipam:vlangroup_list' -class VLANGroupBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_vlangroup' +class VLANGroupBulkImportView(BulkImportView): queryset = VLANGroup.objects.all() model_form = forms.VLANGroupCSVForm table = tables.VLANGroupTable @@ -904,8 +897,7 @@ class VLANDeleteView(ObjectDeleteView): default_return_url = 'ipam:vlan_list' -class VLANBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_vlan' +class VLANBulkImportView(BulkImportView): queryset = VLAN.objects.all() model_form = forms.VLANCSVForm table = tables.VLANTable @@ -969,8 +961,7 @@ class ServiceEditView(ObjectEditView): return service.parent.get_absolute_url() -class ServiceBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'ipam.add_service' +class ServiceBulkImportView(BulkImportView): queryset = Service.objects.all() model_form = forms.ServiceCSVForm table = tables.ServiceTable diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index 7c69d0ac4..00794f684 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -41,8 +41,7 @@ class SecretRoleEditView(ObjectEditView): default_return_url = 'secrets:secretrole_list' -class SecretRoleBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'secrets.add_secretrole' +class SecretRoleBulkImportView(BulkImportView): queryset = SecretRole.objects.all() model_form = forms.SecretRoleCSVForm table = tables.SecretRoleTable @@ -189,7 +188,6 @@ class SecretDeleteView(ObjectDeleteView): class SecretBulkImportView(BulkImportView): - permission_required = 'secrets.add_secret' queryset = Secret.objects.all() model_form = forms.SecretCSVForm table = tables.SecretTable diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 97480bb6a..f666e606a 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -35,8 +35,7 @@ class TenantGroupEditView(ObjectEditView): default_return_url = 'tenancy:tenantgroup_list' -class TenantGroupBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'tenancy.add_tenantgroup' +class TenantGroupBulkImportView(BulkImportView): queryset = TenantGroup.objects.all() model_form = forms.TenantGroupCSVForm table = tables.TenantGroupTable @@ -99,8 +98,7 @@ class TenantDeleteView(ObjectDeleteView): default_return_url = 'tenancy:tenant_list' -class TenantBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'tenancy.add_tenant' +class TenantBulkImportView(BulkImportView): queryset = Tenant.objects.all() model_form = forms.TenantCSVForm table = tables.TenantTable diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index f4267748f..3d11cf25b 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -652,7 +652,7 @@ class ObjectImportView(GetReturnURLMixin, View): }) -class BulkImportView(GetReturnURLMixin, View): +class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): """ Import objects in bulk (CSV format). @@ -684,6 +684,9 @@ class BulkImportView(GetReturnURLMixin, View): """ return obj_form.save() + def get_required_permission(self): + return get_permission_for_model(self.queryset.model, 'add') + def get(self, request): return render(request, self.template_name, { diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 8bc3876ca..de4569b83 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -33,8 +33,7 @@ class ClusterTypeEditView(ObjectEditView): default_return_url = 'virtualization:clustertype_list' -class ClusterTypeBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'virtualization.add_clustertype' +class ClusterTypeBulkImportView(BulkImportView): queryset = ClusterType.objects.all() model_form = forms.ClusterTypeCSVForm table = tables.ClusterTypeTable @@ -63,8 +62,7 @@ class ClusterGroupEditView(ObjectEditView): default_return_url = 'virtualization:clustergroup_list' -class ClusterGroupBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'virtualization.add_clustergroup' +class ClusterGroupBulkImportView(BulkImportView): queryset = ClusterGroup.objects.all() model_form = forms.ClusterGroupCSVForm table = tables.ClusterGroupTable @@ -119,8 +117,7 @@ class ClusterDeleteView(ObjectDeleteView): default_return_url = 'virtualization:cluster_list' -class ClusterBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'virtualization.add_cluster' +class ClusterBulkImportView(BulkImportView): queryset = Cluster.objects.all() model_form = forms.ClusterCSVForm table = tables.ClusterTable @@ -274,8 +271,7 @@ class VirtualMachineDeleteView(ObjectDeleteView): default_return_url = 'virtualization:virtualmachine_list' -class VirtualMachineBulkImportView(PermissionRequiredMixin, BulkImportView): - permission_required = 'virtualization.add_virtualmachine' +class VirtualMachineBulkImportView(BulkImportView): queryset = VirtualMachine.objects.all() model_form = forms.VirtualMachineCSVForm table = tables.VirtualMachineTable