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

Transition ObjectEditView to use ObjectPermissionRequiredMixin

This commit is contained in:
Jeremy Stretch
2020-05-21 13:59:19 -04:00
parent 993ee8c900
commit 406b076b95
15 changed files with 99 additions and 283 deletions

View File

@ -10,7 +10,7 @@ urlpatterns = [
# Providers # Providers
path('providers/', views.ProviderListView.as_view(), name='provider_list'), path('providers/', views.ProviderListView.as_view(), name='provider_list'),
path('providers/add/', views.ProviderCreateView.as_view(), name='provider_add'), path('providers/add/', views.ProviderEditView.as_view(), name='provider_add'),
path('providers/import/', views.ProviderBulkImportView.as_view(), name='provider_import'), path('providers/import/', views.ProviderBulkImportView.as_view(), name='provider_import'),
path('providers/edit/', views.ProviderBulkEditView.as_view(), name='provider_bulk_edit'), path('providers/edit/', views.ProviderBulkEditView.as_view(), name='provider_bulk_edit'),
path('providers/delete/', views.ProviderBulkDeleteView.as_view(), name='provider_bulk_delete'), path('providers/delete/', views.ProviderBulkDeleteView.as_view(), name='provider_bulk_delete'),
@ -21,7 +21,7 @@ urlpatterns = [
# Circuit types # Circuit types
path('circuit-types/', views.CircuitTypeListView.as_view(), name='circuittype_list'), path('circuit-types/', views.CircuitTypeListView.as_view(), name='circuittype_list'),
path('circuit-types/add/', views.CircuitTypeCreateView.as_view(), name='circuittype_add'), path('circuit-types/add/', views.CircuitTypeEditView.as_view(), name='circuittype_add'),
path('circuit-types/import/', views.CircuitTypeBulkImportView.as_view(), name='circuittype_import'), path('circuit-types/import/', views.CircuitTypeBulkImportView.as_view(), name='circuittype_import'),
path('circuit-types/delete/', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'), path('circuit-types/delete/', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'),
path('circuit-types/<slug:slug>/edit/', views.CircuitTypeEditView.as_view(), name='circuittype_edit'), path('circuit-types/<slug:slug>/edit/', views.CircuitTypeEditView.as_view(), name='circuittype_edit'),
@ -29,7 +29,7 @@ urlpatterns = [
# Circuits # Circuits
path('circuits/', views.CircuitListView.as_view(), name='circuit_list'), path('circuits/', views.CircuitListView.as_view(), name='circuit_list'),
path('circuits/add/', views.CircuitCreateView.as_view(), name='circuit_add'), path('circuits/add/', views.CircuitEditView.as_view(), name='circuit_add'),
path('circuits/import/', views.CircuitBulkImportView.as_view(), name='circuit_import'), path('circuits/import/', views.CircuitBulkImportView.as_view(), name='circuit_import'),
path('circuits/edit/', views.CircuitBulkEditView.as_view(), name='circuit_bulk_edit'), path('circuits/edit/', views.CircuitBulkEditView.as_view(), name='circuit_bulk_edit'),
path('circuits/delete/', views.CircuitBulkDeleteView.as_view(), name='circuit_bulk_delete'), path('circuits/delete/', views.CircuitBulkDeleteView.as_view(), name='circuit_bulk_delete'),
@ -41,7 +41,7 @@ urlpatterns = [
# Circuit terminations # Circuit terminations
path('circuits/<int:circuit>/terminations/add/', views.CircuitTerminationCreateView.as_view(), name='circuittermination_add'), path('circuits/<int:circuit>/terminations/add/', views.CircuitTerminationEditView.as_view(), name='circuittermination_add'),
path('circuit-terminations/<int:pk>/edit/', views.CircuitTerminationEditView.as_view(), name='circuittermination_edit'), path('circuit-terminations/<int:pk>/edit/', views.CircuitTerminationEditView.as_view(), name='circuittermination_edit'),
path('circuit-terminations/<int:pk>/delete/', views.CircuitTerminationDeleteView.as_view(), name='circuittermination_delete'), path('circuit-terminations/<int:pk>/delete/', views.CircuitTerminationDeleteView.as_view(), name='circuittermination_delete'),
path('circuit-terminations/<int:termination_a_id>/connect/<str:termination_b_type>/', CableCreateView.as_view(), name='circuittermination_connect', kwargs={'termination_a_type': CircuitTermination}), path('circuit-terminations/<int:termination_a_id>/connect/<str:termination_b_type>/', CableCreateView.as_view(), name='circuittermination_connect', kwargs={'termination_a_type': CircuitTermination}),

View File

@ -59,18 +59,13 @@ class ProviderView(PermissionRequiredMixin, View):
}) })
class ProviderCreateView(PermissionRequiredMixin, ObjectEditView): class ProviderEditView(ObjectEditView):
permission_required = 'circuits.add_provider'
queryset = Provider.objects.all() queryset = Provider.objects.all()
model_form = forms.ProviderForm model_form = forms.ProviderForm
template_name = 'circuits/provider_edit.html' template_name = 'circuits/provider_edit.html'
default_return_url = 'circuits:provider_list' default_return_url = 'circuits:provider_list'
class ProviderEditView(ProviderCreateView):
permission_required = 'circuits.change_provider'
class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView): class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'circuits.delete_provider' permission_required = 'circuits.delete_provider'
queryset = Provider.objects.all() queryset = Provider.objects.all()
@ -111,17 +106,12 @@ class CircuitTypeListView(ObjectListView):
table = tables.CircuitTypeTable table = tables.CircuitTypeTable
class CircuitTypeCreateView(PermissionRequiredMixin, ObjectEditView): class CircuitTypeEditView(ObjectEditView):
permission_required = 'circuits.add_circuittype'
queryset = CircuitType.objects.all() queryset = CircuitType.objects.all()
model_form = forms.CircuitTypeForm model_form = forms.CircuitTypeForm
default_return_url = 'circuits:circuittype_list' default_return_url = 'circuits:circuittype_list'
class CircuitTypeEditView(CircuitTypeCreateView):
permission_required = 'circuits.change_circuittype'
class CircuitTypeBulkImportView(PermissionRequiredMixin, BulkImportView): class CircuitTypeBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'circuits.add_circuittype' permission_required = 'circuits.add_circuittype'
queryset = CircuitType.objects.all() queryset = CircuitType.objects.all()
@ -175,18 +165,13 @@ class CircuitView(PermissionRequiredMixin, View):
}) })
class CircuitCreateView(PermissionRequiredMixin, ObjectEditView): class CircuitEditView(ObjectEditView):
permission_required = 'circuits.add_circuit'
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
model_form = forms.CircuitForm model_form = forms.CircuitForm
template_name = 'circuits/circuit_edit.html' template_name = 'circuits/circuit_edit.html'
default_return_url = 'circuits:circuit_list' default_return_url = 'circuits:circuit_list'
class CircuitEditView(CircuitCreateView):
permission_required = 'circuits.change_circuit'
class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView): class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'circuits.delete_circuit' permission_required = 'circuits.delete_circuit'
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
@ -271,8 +256,7 @@ def circuit_terminations_swap(request, pk):
# Circuit terminations # Circuit terminations
# #
class CircuitTerminationCreateView(PermissionRequiredMixin, ObjectEditView): class CircuitTerminationEditView(ObjectEditView):
permission_required = 'circuits.add_circuittermination'
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()
model_form = forms.CircuitTerminationForm model_form = forms.CircuitTerminationForm
template_name = 'circuits/circuittermination_edit.html' template_name = 'circuits/circuittermination_edit.html'
@ -286,10 +270,6 @@ class CircuitTerminationCreateView(PermissionRequiredMixin, ObjectEditView):
return obj.circuit.get_absolute_url() return obj.circuit.get_absolute_url()
class CircuitTerminationEditView(CircuitTerminationCreateView):
permission_required = 'circuits.change_circuittermination'
class CircuitTerminationDeleteView(PermissionRequiredMixin, ObjectDeleteView): class CircuitTerminationDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'circuits.delete_circuittermination' permission_required = 'circuits.delete_circuittermination'
queryset = CircuitTermination.objects.all() queryset = CircuitTermination.objects.all()

View File

@ -1,7 +1,7 @@
from django.urls import path from django.urls import path
from extras.views import ObjectChangeLogView, ImageAttachmentEditView from extras.views import ObjectChangeLogView, ImageAttachmentEditView
from ipam.views import ServiceCreateView from ipam.views import ServiceEditView
from . import views from . import views
from .models import ( from .models import (
Cable, ConsolePort, ConsoleServerPort, Device, DeviceRole, DeviceType, FrontPort, Interface, Manufacturer, Platform, Cable, ConsolePort, ConsoleServerPort, Device, DeviceRole, DeviceType, FrontPort, Interface, Manufacturer, Platform,
@ -14,7 +14,7 @@ urlpatterns = [
# Regions # Regions
path('regions/', views.RegionListView.as_view(), name='region_list'), path('regions/', views.RegionListView.as_view(), name='region_list'),
path('regions/add/', views.RegionCreateView.as_view(), name='region_add'), path('regions/add/', views.RegionEditView.as_view(), name='region_add'),
path('regions/import/', views.RegionBulkImportView.as_view(), name='region_import'), path('regions/import/', views.RegionBulkImportView.as_view(), name='region_import'),
path('regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'), path('regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'),
path('regions/<int:pk>/edit/', views.RegionEditView.as_view(), name='region_edit'), path('regions/<int:pk>/edit/', views.RegionEditView.as_view(), name='region_edit'),
@ -22,7 +22,7 @@ urlpatterns = [
# Sites # Sites
path('sites/', views.SiteListView.as_view(), name='site_list'), path('sites/', views.SiteListView.as_view(), name='site_list'),
path('sites/add/', views.SiteCreateView.as_view(), name='site_add'), path('sites/add/', views.SiteEditView.as_view(), name='site_add'),
path('sites/import/', views.SiteBulkImportView.as_view(), name='site_import'), path('sites/import/', views.SiteBulkImportView.as_view(), name='site_import'),
path('sites/edit/', views.SiteBulkEditView.as_view(), name='site_bulk_edit'), path('sites/edit/', views.SiteBulkEditView.as_view(), name='site_bulk_edit'),
path('sites/delete/', views.SiteBulkDeleteView.as_view(), name='site_bulk_delete'), path('sites/delete/', views.SiteBulkDeleteView.as_view(), name='site_bulk_delete'),
@ -34,7 +34,7 @@ urlpatterns = [
# Rack groups # Rack groups
path('rack-groups/', views.RackGroupListView.as_view(), name='rackgroup_list'), path('rack-groups/', views.RackGroupListView.as_view(), name='rackgroup_list'),
path('rack-groups/add/', views.RackGroupCreateView.as_view(), name='rackgroup_add'), path('rack-groups/add/', views.RackGroupEditView.as_view(), name='rackgroup_add'),
path('rack-groups/import/', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'), path('rack-groups/import/', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'),
path('rack-groups/delete/', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'), path('rack-groups/delete/', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'),
path('rack-groups/<int:pk>/edit/', views.RackGroupEditView.as_view(), name='rackgroup_edit'), path('rack-groups/<int:pk>/edit/', views.RackGroupEditView.as_view(), name='rackgroup_edit'),
@ -42,7 +42,7 @@ urlpatterns = [
# Rack roles # Rack roles
path('rack-roles/', views.RackRoleListView.as_view(), name='rackrole_list'), path('rack-roles/', views.RackRoleListView.as_view(), name='rackrole_list'),
path('rack-roles/add/', views.RackRoleCreateView.as_view(), name='rackrole_add'), path('rack-roles/add/', views.RackRoleEditView.as_view(), name='rackrole_add'),
path('rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'), path('rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'),
path('rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'), path('rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'),
path('rack-roles/<int:pk>/edit/', views.RackRoleEditView.as_view(), name='rackrole_edit'), path('rack-roles/<int:pk>/edit/', views.RackRoleEditView.as_view(), name='rackrole_edit'),
@ -50,7 +50,7 @@ urlpatterns = [
# Rack reservations # Rack reservations
path('rack-reservations/', views.RackReservationListView.as_view(), name='rackreservation_list'), path('rack-reservations/', views.RackReservationListView.as_view(), name='rackreservation_list'),
path('rack-reservations/add/', views.RackReservationCreateView.as_view(), name='rackreservation_add'), path('rack-reservations/add/', views.RackReservationEditView.as_view(), name='rackreservation_add'),
path('rack-reservations/import/', views.RackReservationImportView.as_view(), name='rackreservation_import'), path('rack-reservations/import/', views.RackReservationImportView.as_view(), name='rackreservation_import'),
path('rack-reservations/edit/', views.RackReservationBulkEditView.as_view(), name='rackreservation_bulk_edit'), path('rack-reservations/edit/', views.RackReservationBulkEditView.as_view(), name='rackreservation_bulk_edit'),
path('rack-reservations/delete/', views.RackReservationBulkDeleteView.as_view(), name='rackreservation_bulk_delete'), path('rack-reservations/delete/', views.RackReservationBulkDeleteView.as_view(), name='rackreservation_bulk_delete'),
@ -62,7 +62,7 @@ urlpatterns = [
# Racks # Racks
path('racks/', views.RackListView.as_view(), name='rack_list'), path('racks/', views.RackListView.as_view(), name='rack_list'),
path('rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'), path('rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'),
path('racks/add/', views.RackCreateView.as_view(), name='rack_add'), path('racks/add/', views.RackEditView.as_view(), name='rack_add'),
path('racks/import/', views.RackBulkImportView.as_view(), name='rack_import'), path('racks/import/', views.RackBulkImportView.as_view(), name='rack_import'),
path('racks/edit/', views.RackBulkEditView.as_view(), name='rack_bulk_edit'), path('racks/edit/', views.RackBulkEditView.as_view(), name='rack_bulk_edit'),
path('racks/delete/', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'), path('racks/delete/', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'),
@ -74,7 +74,7 @@ urlpatterns = [
# Manufacturers # Manufacturers
path('manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'), path('manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'),
path('manufacturers/add/', views.ManufacturerCreateView.as_view(), name='manufacturer_add'), path('manufacturers/add/', views.ManufacturerEditView.as_view(), name='manufacturer_add'),
path('manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'), path('manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'),
path('manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'), path('manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'),
path('manufacturers/<slug:slug>/edit/', views.ManufacturerEditView.as_view(), name='manufacturer_edit'), path('manufacturers/<slug:slug>/edit/', views.ManufacturerEditView.as_view(), name='manufacturer_edit'),
@ -82,7 +82,7 @@ urlpatterns = [
# Device types # Device types
path('device-types/', views.DeviceTypeListView.as_view(), name='devicetype_list'), path('device-types/', views.DeviceTypeListView.as_view(), name='devicetype_list'),
path('device-types/add/', views.DeviceTypeCreateView.as_view(), name='devicetype_add'), path('device-types/add/', views.DeviceTypeEditView.as_view(), name='devicetype_add'),
path('device-types/import/', views.DeviceTypeImportView.as_view(), name='devicetype_import'), path('device-types/import/', views.DeviceTypeImportView.as_view(), name='devicetype_import'),
path('device-types/edit/', views.DeviceTypeBulkEditView.as_view(), name='devicetype_bulk_edit'), path('device-types/edit/', views.DeviceTypeBulkEditView.as_view(), name='devicetype_bulk_edit'),
path('device-types/delete/', views.DeviceTypeBulkDeleteView.as_view(), name='devicetype_bulk_delete'), path('device-types/delete/', views.DeviceTypeBulkDeleteView.as_view(), name='devicetype_bulk_delete'),
@ -149,7 +149,7 @@ urlpatterns = [
# Device roles # Device roles
path('device-roles/', views.DeviceRoleListView.as_view(), name='devicerole_list'), path('device-roles/', views.DeviceRoleListView.as_view(), name='devicerole_list'),
path('device-roles/add/', views.DeviceRoleCreateView.as_view(), name='devicerole_add'), path('device-roles/add/', views.DeviceRoleEditView.as_view(), name='devicerole_add'),
path('device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'), path('device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'),
path('device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'), path('device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'),
path('device-roles/<slug:slug>/edit/', views.DeviceRoleEditView.as_view(), name='devicerole_edit'), path('device-roles/<slug:slug>/edit/', views.DeviceRoleEditView.as_view(), name='devicerole_edit'),
@ -157,7 +157,7 @@ urlpatterns = [
# Platforms # Platforms
path('platforms/', views.PlatformListView.as_view(), name='platform_list'), path('platforms/', views.PlatformListView.as_view(), name='platform_list'),
path('platforms/add/', views.PlatformCreateView.as_view(), name='platform_add'), path('platforms/add/', views.PlatformEditView.as_view(), name='platform_add'),
path('platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'), path('platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'),
path('platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'), path('platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'),
path('platforms/<slug:slug>/edit/', views.PlatformEditView.as_view(), name='platform_edit'), path('platforms/<slug:slug>/edit/', views.PlatformEditView.as_view(), name='platform_edit'),
@ -165,7 +165,7 @@ urlpatterns = [
# Devices # Devices
path('devices/', views.DeviceListView.as_view(), name='device_list'), path('devices/', views.DeviceListView.as_view(), name='device_list'),
path('devices/add/', views.DeviceCreateView.as_view(), name='device_add'), path('devices/add/', views.DeviceEditView.as_view(), name='device_add'),
path('devices/import/', views.DeviceBulkImportView.as_view(), name='device_import'), path('devices/import/', views.DeviceBulkImportView.as_view(), name='device_import'),
path('devices/import/child-devices/', views.ChildDeviceBulkImportView.as_view(), name='device_import_child'), path('devices/import/child-devices/', views.ChildDeviceBulkImportView.as_view(), name='device_import_child'),
path('devices/edit/', views.DeviceBulkEditView.as_view(), name='device_bulk_edit'), path('devices/edit/', views.DeviceBulkEditView.as_view(), name='device_bulk_edit'),
@ -179,7 +179,7 @@ urlpatterns = [
path('devices/<int:pk>/status/', views.DeviceStatusView.as_view(), name='device_status'), path('devices/<int:pk>/status/', views.DeviceStatusView.as_view(), name='device_status'),
path('devices/<int:pk>/lldp-neighbors/', views.DeviceLLDPNeighborsView.as_view(), name='device_lldp_neighbors'), path('devices/<int:pk>/lldp-neighbors/', views.DeviceLLDPNeighborsView.as_view(), name='device_lldp_neighbors'),
path('devices/<int:pk>/config/', views.DeviceConfigView.as_view(), name='device_config'), path('devices/<int:pk>/config/', views.DeviceConfigView.as_view(), name='device_config'),
path('devices/<int:device>/services/assign/', ServiceCreateView.as_view(), name='device_service_assign'), path('devices/<int:device>/services/assign/', ServiceEditView.as_view(), name='device_service_assign'),
path('devices/<int:object_id>/images/add/', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}), path('devices/<int:object_id>/images/add/', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}),
# Console ports # Console ports
@ -332,7 +332,7 @@ urlpatterns = [
# Power panels # Power panels
path('power-panels/', views.PowerPanelListView.as_view(), name='powerpanel_list'), path('power-panels/', views.PowerPanelListView.as_view(), name='powerpanel_list'),
path('power-panels/add/', views.PowerPanelCreateView.as_view(), name='powerpanel_add'), path('power-panels/add/', views.PowerPanelEditView.as_view(), name='powerpanel_add'),
path('power-panels/import/', views.PowerPanelBulkImportView.as_view(), name='powerpanel_import'), path('power-panels/import/', views.PowerPanelBulkImportView.as_view(), name='powerpanel_import'),
path('power-panels/edit/', views.PowerPanelBulkEditView.as_view(), name='powerpanel_bulk_edit'), path('power-panels/edit/', views.PowerPanelBulkEditView.as_view(), name='powerpanel_bulk_edit'),
path('power-panels/delete/', views.PowerPanelBulkDeleteView.as_view(), name='powerpanel_bulk_delete'), path('power-panels/delete/', views.PowerPanelBulkDeleteView.as_view(), name='powerpanel_bulk_delete'),
@ -343,7 +343,7 @@ urlpatterns = [
# Power feeds # Power feeds
path('power-feeds/', views.PowerFeedListView.as_view(), name='powerfeed_list'), path('power-feeds/', views.PowerFeedListView.as_view(), name='powerfeed_list'),
path('power-feeds/add/', views.PowerFeedCreateView.as_view(), name='powerfeed_add'), path('power-feeds/add/', views.PowerFeedEditView.as_view(), name='powerfeed_add'),
path('power-feeds/import/', views.PowerFeedBulkImportView.as_view(), name='powerfeed_import'), path('power-feeds/import/', views.PowerFeedBulkImportView.as_view(), name='powerfeed_import'),
path('power-feeds/edit/', views.PowerFeedBulkEditView.as_view(), name='powerfeed_bulk_edit'), path('power-feeds/edit/', views.PowerFeedBulkEditView.as_view(), name='powerfeed_bulk_edit'),
path('power-feeds/delete/', views.PowerFeedBulkDeleteView.as_view(), name='powerfeed_bulk_delete'), path('power-feeds/delete/', views.PowerFeedBulkDeleteView.as_view(), name='powerfeed_bulk_delete'),

View File

@ -154,17 +154,12 @@ class RegionListView(ObjectListView):
table = tables.RegionTable table = tables.RegionTable
class RegionCreateView(PermissionRequiredMixin, ObjectEditView): class RegionEditView(ObjectEditView):
permission_required = 'dcim.add_region'
queryset = Region.objects.all() queryset = Region.objects.all()
model_form = forms.RegionForm model_form = forms.RegionForm
default_return_url = 'dcim:region_list' default_return_url = 'dcim:region_list'
class RegionEditView(RegionCreateView):
permission_required = 'dcim.change_region'
class RegionBulkImportView(PermissionRequiredMixin, BulkImportView): class RegionBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_region' permission_required = 'dcim.add_region'
queryset = Region.objects.all() queryset = Region.objects.all()
@ -218,18 +213,13 @@ class SiteView(ObjectPermissionRequiredMixin, View):
}) })
class SiteCreateView(ObjectPermissionRequiredMixin, ObjectEditView): class SiteEditView(ObjectEditView):
permission_required = 'dcim.add_site'
queryset = Site.objects.all() queryset = Site.objects.all()
model_form = forms.SiteForm model_form = forms.SiteForm
template_name = 'dcim/site_edit.html' template_name = 'dcim/site_edit.html'
default_return_url = 'dcim:site_list' default_return_url = 'dcim:site_list'
class SiteEditView(SiteCreateView):
permission_required = 'dcim.change_site'
class SiteDeleteView(ObjectPermissionRequiredMixin, ObjectDeleteView): class SiteDeleteView(ObjectPermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_site' permission_required = 'dcim.delete_site'
queryset = Site.objects.all() queryset = Site.objects.all()
@ -278,17 +268,12 @@ class RackGroupListView(ObjectListView):
table = tables.RackGroupTable table = tables.RackGroupTable
class RackGroupCreateView(PermissionRequiredMixin, ObjectEditView): class RackGroupEditView(ObjectEditView):
permission_required = 'dcim.add_rackgroup'
queryset = RackGroup.objects.all() queryset = RackGroup.objects.all()
model_form = forms.RackGroupForm model_form = forms.RackGroupForm
default_return_url = 'dcim:rackgroup_list' default_return_url = 'dcim:rackgroup_list'
class RackGroupEditView(RackGroupCreateView):
permission_required = 'dcim.change_rackgroup'
class RackGroupBulkImportView(PermissionRequiredMixin, BulkImportView): class RackGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_rackgroup' permission_required = 'dcim.add_rackgroup'
queryset = RackGroup.objects.all() queryset = RackGroup.objects.all()
@ -314,17 +299,12 @@ class RackRoleListView(ObjectListView):
table = tables.RackRoleTable table = tables.RackRoleTable
class RackRoleCreateView(PermissionRequiredMixin, ObjectEditView): class RackRoleEditView(ObjectEditView):
permission_required = 'dcim.add_rackrole'
queryset = RackRole.objects.all() queryset = RackRole.objects.all()
model_form = forms.RackRoleForm model_form = forms.RackRoleForm
default_return_url = 'dcim:rackrole_list' default_return_url = 'dcim:rackrole_list'
class RackRoleEditView(RackRoleCreateView):
permission_required = 'dcim.change_rackrole'
class RackRoleBulkImportView(PermissionRequiredMixin, BulkImportView): class RackRoleBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_rackrole' permission_required = 'dcim.add_rackrole'
queryset = RackRole.objects.all() queryset = RackRole.objects.all()
@ -424,18 +404,13 @@ class RackView(PermissionRequiredMixin, View):
}) })
class RackCreateView(PermissionRequiredMixin, ObjectEditView): class RackEditView(ObjectEditView):
permission_required = 'dcim.add_rack'
queryset = Rack.objects.all() queryset = Rack.objects.all()
model_form = forms.RackForm model_form = forms.RackForm
template_name = 'dcim/rack_edit.html' template_name = 'dcim/rack_edit.html'
default_return_url = 'dcim:rack_list' default_return_url = 'dcim:rack_list'
class RackEditView(RackCreateView):
permission_required = 'dcim.change_rack'
class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView): class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_rack' permission_required = 'dcim.delete_rack'
queryset = Rack.objects.all() queryset = Rack.objects.all()
@ -491,8 +466,7 @@ class RackReservationView(PermissionRequiredMixin, View):
}) })
class RackReservationCreateView(PermissionRequiredMixin, ObjectEditView): class RackReservationEditView(ObjectEditView):
permission_required = 'dcim.add_rackreservation'
queryset = RackReservation.objects.all() queryset = RackReservation.objects.all()
model_form = forms.RackReservationForm model_form = forms.RackReservationForm
template_name = 'dcim/rackreservation_edit.html' template_name = 'dcim/rackreservation_edit.html'
@ -506,10 +480,6 @@ class RackReservationCreateView(PermissionRequiredMixin, ObjectEditView):
return obj return obj
class RackReservationEditView(RackReservationCreateView):
permission_required = 'dcim.change_rackreservation'
class RackReservationDeleteView(PermissionRequiredMixin, ObjectDeleteView): class RackReservationDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_rackreservation' permission_required = 'dcim.delete_rackreservation'
queryset = RackReservation.objects.all() queryset = RackReservation.objects.all()
@ -564,17 +534,12 @@ class ManufacturerListView(ObjectListView):
table = tables.ManufacturerTable table = tables.ManufacturerTable
class ManufacturerCreateView(PermissionRequiredMixin, ObjectEditView): class ManufacturerEditView(ObjectEditView):
permission_required = 'dcim.add_manufacturer'
queryset = Manufacturer.objects.all() queryset = Manufacturer.objects.all()
model_form = forms.ManufacturerForm model_form = forms.ManufacturerForm
default_return_url = 'dcim:manufacturer_list' default_return_url = 'dcim:manufacturer_list'
class ManufacturerEditView(ManufacturerCreateView):
permission_required = 'dcim.change_manufacturer'
class ManufacturerBulkImportView(PermissionRequiredMixin, BulkImportView): class ManufacturerBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_manufacturer' permission_required = 'dcim.add_manufacturer'
queryset = Manufacturer.objects.all() queryset = Manufacturer.objects.all()
@ -664,18 +629,13 @@ class DeviceTypeView(PermissionRequiredMixin, View):
}) })
class DeviceTypeCreateView(PermissionRequiredMixin, ObjectEditView): class DeviceTypeEditView(ObjectEditView):
permission_required = 'dcim.add_devicetype'
queryset = DeviceType.objects.all() queryset = DeviceType.objects.all()
model_form = forms.DeviceTypeForm model_form = forms.DeviceTypeForm
template_name = 'dcim/devicetype_edit.html' template_name = 'dcim/devicetype_edit.html'
default_return_url = 'dcim:devicetype_list' default_return_url = 'dcim:devicetype_list'
class DeviceTypeEditView(DeviceTypeCreateView):
permission_required = 'dcim.change_devicetype'
class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView): class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_devicetype' permission_required = 'dcim.delete_devicetype'
queryset = DeviceType.objects.all() queryset = DeviceType.objects.all()
@ -738,8 +698,7 @@ class ConsolePortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class ConsolePortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class ConsolePortTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_consoleporttemplate'
queryset = ConsolePortTemplate.objects.all() queryset = ConsolePortTemplate.objects.all()
model_form = forms.ConsolePortTemplateForm model_form = forms.ConsolePortTemplateForm
@ -774,8 +733,7 @@ class ConsoleServerPortTemplateCreateView(PermissionRequiredMixin, ComponentCrea
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class ConsoleServerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class ConsoleServerPortTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_consoleserverporttemplate'
queryset = ConsoleServerPortTemplate.objects.all() queryset = ConsoleServerPortTemplate.objects.all()
model_form = forms.ConsoleServerPortTemplateForm model_form = forms.ConsoleServerPortTemplateForm
@ -810,8 +768,7 @@ class PowerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class PowerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class PowerPortTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_powerporttemplate'
queryset = PowerPortTemplate.objects.all() queryset = PowerPortTemplate.objects.all()
model_form = forms.PowerPortTemplateForm model_form = forms.PowerPortTemplateForm
@ -846,8 +803,7 @@ class PowerOutletTemplateCreateView(PermissionRequiredMixin, ComponentCreateView
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class PowerOutletTemplateEditView(PermissionRequiredMixin, ObjectEditView): class PowerOutletTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_poweroutlettemplate'
queryset = PowerOutletTemplate.objects.all() queryset = PowerOutletTemplate.objects.all()
model_form = forms.PowerOutletTemplateForm model_form = forms.PowerOutletTemplateForm
@ -882,8 +838,7 @@ class InterfaceTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class InterfaceTemplateEditView(PermissionRequiredMixin, ObjectEditView): class InterfaceTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_interfacetemplate'
queryset = InterfaceTemplate.objects.all() queryset = InterfaceTemplate.objects.all()
model_form = forms.InterfaceTemplateForm model_form = forms.InterfaceTemplateForm
@ -918,8 +873,7 @@ class FrontPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class FrontPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class FrontPortTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_frontporttemplate'
queryset = FrontPortTemplate.objects.all() queryset = FrontPortTemplate.objects.all()
model_form = forms.FrontPortTemplateForm model_form = forms.FrontPortTemplateForm
@ -954,8 +908,7 @@ class RearPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class RearPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class RearPortTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_rearporttemplate'
queryset = RearPortTemplate.objects.all() queryset = RearPortTemplate.objects.all()
model_form = forms.RearPortTemplateForm model_form = forms.RearPortTemplateForm
@ -990,8 +943,7 @@ class DeviceBayTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class DeviceBayTemplateEditView(PermissionRequiredMixin, ObjectEditView): class DeviceBayTemplateEditView(ObjectEditView):
permission_required = 'dcim.change_devicebaytemplate'
queryset = DeviceBayTemplate.objects.all() queryset = DeviceBayTemplate.objects.all()
model_form = forms.DeviceBayTemplateForm model_form = forms.DeviceBayTemplateForm
@ -1023,17 +975,12 @@ class DeviceRoleListView(ObjectListView):
table = tables.DeviceRoleTable table = tables.DeviceRoleTable
class DeviceRoleCreateView(PermissionRequiredMixin, ObjectEditView): class DeviceRoleEditView(ObjectEditView):
permission_required = 'dcim.add_devicerole'
queryset = DeviceRole.objects.all() queryset = DeviceRole.objects.all()
model_form = forms.DeviceRoleForm model_form = forms.DeviceRoleForm
default_return_url = 'dcim:devicerole_list' default_return_url = 'dcim:devicerole_list'
class DeviceRoleEditView(DeviceRoleCreateView):
permission_required = 'dcim.change_devicerole'
class DeviceRoleBulkImportView(PermissionRequiredMixin, BulkImportView): class DeviceRoleBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_devicerole' permission_required = 'dcim.add_devicerole'
queryset = DeviceRole.objects.all() queryset = DeviceRole.objects.all()
@ -1058,17 +1005,12 @@ class PlatformListView(ObjectListView):
table = tables.PlatformTable table = tables.PlatformTable
class PlatformCreateView(PermissionRequiredMixin, ObjectEditView): class PlatformEditView(ObjectEditView):
permission_required = 'dcim.add_platform'
queryset = Platform.objects.all() queryset = Platform.objects.all()
model_form = forms.PlatformForm model_form = forms.PlatformForm
default_return_url = 'dcim:platform_list' default_return_url = 'dcim:platform_list'
class PlatformEditView(PlatformCreateView):
permission_required = 'dcim.change_platform'
class PlatformBulkImportView(PermissionRequiredMixin, BulkImportView): class PlatformBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_platform' permission_required = 'dcim.add_platform'
queryset = Platform.objects.all() queryset = Platform.objects.all()
@ -1244,18 +1186,13 @@ class DeviceConfigContextView(PermissionRequiredMixin, ObjectConfigContextView):
base_template = 'dcim/device.html' base_template = 'dcim/device.html'
class DeviceCreateView(PermissionRequiredMixin, ObjectEditView): class DeviceEditView(ObjectEditView):
permission_required = 'dcim.add_device'
queryset = Device.objects.all() queryset = Device.objects.all()
model_form = forms.DeviceForm model_form = forms.DeviceForm
template_name = 'dcim/device_edit.html' template_name = 'dcim/device_edit.html'
default_return_url = 'dcim:device_list' default_return_url = 'dcim:device_list'
class DeviceEditView(DeviceCreateView):
permission_required = 'dcim.change_device'
class DeviceDeleteView(PermissionRequiredMixin, ObjectDeleteView): class DeviceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_device' permission_required = 'dcim.delete_device'
queryset = Device.objects.all() queryset = Device.objects.all()
@ -1328,8 +1265,7 @@ class ConsolePortCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class ConsolePortEditView(PermissionRequiredMixin, ObjectEditView): class ConsolePortEditView(ObjectEditView):
permission_required = 'dcim.change_consoleport'
queryset = ConsolePort.objects.all() queryset = ConsolePort.objects.all()
model_form = forms.ConsolePortForm model_form = forms.ConsolePortForm
@ -1383,8 +1319,7 @@ class ConsoleServerPortCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class ConsoleServerPortEditView(PermissionRequiredMixin, ObjectEditView): class ConsoleServerPortEditView(ObjectEditView):
permission_required = 'dcim.change_consoleserverport'
queryset = ConsoleServerPort.objects.all() queryset = ConsoleServerPort.objects.all()
model_form = forms.ConsoleServerPortForm model_form = forms.ConsoleServerPortForm
@ -1450,8 +1385,7 @@ class PowerPortCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class PowerPortEditView(PermissionRequiredMixin, ObjectEditView): class PowerPortEditView(ObjectEditView):
permission_required = 'dcim.change_powerport'
queryset = PowerPort.objects.all() queryset = PowerPort.objects.all()
model_form = forms.PowerPortForm model_form = forms.PowerPortForm
@ -1505,8 +1439,7 @@ class PowerOutletCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class PowerOutletEditView(PermissionRequiredMixin, ObjectEditView): class PowerOutletEditView(ObjectEditView):
permission_required = 'dcim.change_poweroutlet'
queryset = PowerOutlet.objects.all() queryset = PowerOutlet.objects.all()
model_form = forms.PowerOutletForm model_form = forms.PowerOutletForm
@ -1608,8 +1541,7 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class InterfaceEditView(PermissionRequiredMixin, ObjectEditView): class InterfaceEditView(ObjectEditView):
permission_required = 'dcim.change_interface'
queryset = Interface.objects.all() queryset = Interface.objects.all()
model_form = forms.InterfaceForm model_form = forms.InterfaceForm
template_name = 'dcim/interface_edit.html' template_name = 'dcim/interface_edit.html'
@ -1676,8 +1608,7 @@ class FrontPortCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class FrontPortEditView(PermissionRequiredMixin, ObjectEditView): class FrontPortEditView(ObjectEditView):
permission_required = 'dcim.change_frontport'
queryset = FrontPort.objects.all() queryset = FrontPort.objects.all()
model_form = forms.FrontPortForm model_form = forms.FrontPortForm
@ -1743,8 +1674,7 @@ class RearPortCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class RearPortEditView(PermissionRequiredMixin, ObjectEditView): class RearPortEditView(ObjectEditView):
permission_required = 'dcim.change_rearport'
queryset = RearPort.objects.all() queryset = RearPort.objects.all()
model_form = forms.RearPortForm model_form = forms.RearPortForm
@ -1812,8 +1742,7 @@ class DeviceBayCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'dcim/device_component_add.html' template_name = 'dcim/device_component_add.html'
class DeviceBayEditView(PermissionRequiredMixin, ObjectEditView): class DeviceBayEditView(ObjectEditView):
permission_required = 'dcim.change_devicebay'
queryset = DeviceBay.objects.all() queryset = DeviceBay.objects.all()
model_form = forms.DeviceBayForm model_form = forms.DeviceBayForm
@ -2152,8 +2081,7 @@ class CableCreateView(PermissionRequiredMixin, GetReturnURLMixin, View):
}) })
class CableEditView(PermissionRequiredMixin, ObjectEditView): class CableEditView(ObjectEditView):
permission_required = 'dcim.change_cable'
queryset = Cable.objects.all() queryset = Cable.objects.all()
model_form = forms.CableForm model_form = forms.CableForm
template_name = 'dcim/cable_edit.html' template_name = 'dcim/cable_edit.html'
@ -2306,8 +2234,7 @@ class InventoryItemListView(ObjectListView):
action_buttons = ('import', 'export') action_buttons = ('import', 'export')
class InventoryItemEditView(PermissionRequiredMixin, ObjectEditView): class InventoryItemEditView(ObjectEditView):
permission_required = 'dcim.change_inventoryitem'
queryset = InventoryItem.objects.all() queryset = InventoryItem.objects.all()
model_form = forms.InventoryItemForm model_form = forms.InventoryItemForm
@ -2650,17 +2577,12 @@ class PowerPanelView(PermissionRequiredMixin, View):
}) })
class PowerPanelCreateView(PermissionRequiredMixin, ObjectEditView): class PowerPanelEditView(ObjectEditView):
permission_required = 'dcim.add_powerpanel'
queryset = PowerPanel.objects.all() queryset = PowerPanel.objects.all()
model_form = forms.PowerPanelForm model_form = forms.PowerPanelForm
default_return_url = 'dcim:powerpanel_list' default_return_url = 'dcim:powerpanel_list'
class PowerPanelEditView(PowerPanelCreateView):
permission_required = 'dcim.change_powerpanel'
class PowerPanelDeleteView(PermissionRequiredMixin, ObjectDeleteView): class PowerPanelDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_powerpanel' permission_required = 'dcim.delete_powerpanel'
queryset = PowerPanel.objects.all() queryset = PowerPanel.objects.all()
@ -2721,18 +2643,13 @@ class PowerFeedView(PermissionRequiredMixin, View):
}) })
class PowerFeedCreateView(PermissionRequiredMixin, ObjectEditView): class PowerFeedEditView(ObjectEditView):
permission_required = 'dcim.add_powerfeed'
queryset = PowerFeed.objects.all() queryset = PowerFeed.objects.all()
model_form = forms.PowerFeedForm model_form = forms.PowerFeedForm
template_name = 'dcim/powerfeed_edit.html' template_name = 'dcim/powerfeed_edit.html'
default_return_url = 'dcim:powerfeed_list' default_return_url = 'dcim:powerfeed_list'
class PowerFeedEditView(PowerFeedCreateView):
permission_required = 'dcim.change_powerfeed'
class PowerFeedDeleteView(PermissionRequiredMixin, ObjectDeleteView): class PowerFeedDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'dcim.delete_powerfeed' permission_required = 'dcim.delete_powerfeed'
queryset = PowerFeed.objects.all() queryset = PowerFeed.objects.all()

View File

@ -18,7 +18,7 @@ urlpatterns = [
# Config contexts # Config contexts
path('config-contexts/', views.ConfigContextListView.as_view(), name='configcontext_list'), path('config-contexts/', views.ConfigContextListView.as_view(), name='configcontext_list'),
path('config-contexts/add/', views.ConfigContextCreateView.as_view(), name='configcontext_add'), path('config-contexts/add/', views.ConfigContextEditView.as_view(), name='configcontext_add'),
path('config-contexts/edit/', views.ConfigContextBulkEditView.as_view(), name='configcontext_bulk_edit'), path('config-contexts/edit/', views.ConfigContextBulkEditView.as_view(), name='configcontext_bulk_edit'),
path('config-contexts/delete/', views.ConfigContextBulkDeleteView.as_view(), name='configcontext_bulk_delete'), path('config-contexts/delete/', views.ConfigContextBulkDeleteView.as_view(), name='configcontext_bulk_delete'),
path('config-contexts/<int:pk>/', views.ConfigContextView.as_view(), name='configcontext'), path('config-contexts/<int:pk>/', views.ConfigContextView.as_view(), name='configcontext'),

View File

@ -64,8 +64,7 @@ class TagView(PermissionRequiredMixin, View):
}) })
class TagEditView(PermissionRequiredMixin, ObjectEditView): class TagEditView(ObjectEditView):
permission_required = 'extras.change_tag'
queryset = Tag.objects.all() queryset = Tag.objects.all()
model_form = forms.TagForm model_form = forms.TagForm
default_return_url = 'extras:tag_list' default_return_url = 'extras:tag_list'
@ -132,18 +131,13 @@ class ConfigContextView(PermissionRequiredMixin, View):
}) })
class ConfigContextCreateView(PermissionRequiredMixin, ObjectEditView): class ConfigContextEditView(ObjectEditView):
permission_required = 'extras.add_configcontext'
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
model_form = forms.ConfigContextForm model_form = forms.ConfigContextForm
default_return_url = 'extras:configcontext_list' default_return_url = 'extras:configcontext_list'
template_name = 'extras/configcontext_edit.html' template_name = 'extras/configcontext_edit.html'
class ConfigContextEditView(ConfigContextCreateView):
permission_required = 'extras.change_configcontext'
class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView): class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView):
permission_required = 'extras.change_configcontext' permission_required = 'extras.change_configcontext'
queryset = ConfigContext.objects.all() queryset = ConfigContext.objects.all()
@ -301,8 +295,7 @@ class ObjectChangeLogView(View):
# Image attachments # Image attachments
# #
class ImageAttachmentEditView(PermissionRequiredMixin, ObjectEditView): class ImageAttachmentEditView(ObjectEditView):
permission_required = 'extras.change_imageattachment'
queryset = ImageAttachment.objects.all() queryset = ImageAttachment.objects.all()
model_form = forms.ImageAttachmentForm model_form = forms.ImageAttachmentForm

View File

@ -9,7 +9,7 @@ urlpatterns = [
# VRFs # VRFs
path('vrfs/', views.VRFListView.as_view(), name='vrf_list'), path('vrfs/', views.VRFListView.as_view(), name='vrf_list'),
path('vrfs/add/', views.VRFCreateView.as_view(), name='vrf_add'), path('vrfs/add/', views.VRFEditView.as_view(), name='vrf_add'),
path('vrfs/import/', views.VRFBulkImportView.as_view(), name='vrf_import'), path('vrfs/import/', views.VRFBulkImportView.as_view(), name='vrf_import'),
path('vrfs/edit/', views.VRFBulkEditView.as_view(), name='vrf_bulk_edit'), path('vrfs/edit/', views.VRFBulkEditView.as_view(), name='vrf_bulk_edit'),
path('vrfs/delete/', views.VRFBulkDeleteView.as_view(), name='vrf_bulk_delete'), path('vrfs/delete/', views.VRFBulkDeleteView.as_view(), name='vrf_bulk_delete'),
@ -20,7 +20,7 @@ urlpatterns = [
# RIRs # RIRs
path('rirs/', views.RIRListView.as_view(), name='rir_list'), path('rirs/', views.RIRListView.as_view(), name='rir_list'),
path('rirs/add/', views.RIRCreateView.as_view(), name='rir_add'), path('rirs/add/', views.RIREditView.as_view(), name='rir_add'),
path('rirs/import/', views.RIRBulkImportView.as_view(), name='rir_import'), path('rirs/import/', views.RIRBulkImportView.as_view(), name='rir_import'),
path('rirs/delete/', views.RIRBulkDeleteView.as_view(), name='rir_bulk_delete'), path('rirs/delete/', views.RIRBulkDeleteView.as_view(), name='rir_bulk_delete'),
path('rirs/<slug:slug>/edit/', views.RIREditView.as_view(), name='rir_edit'), path('rirs/<slug:slug>/edit/', views.RIREditView.as_view(), name='rir_edit'),
@ -28,7 +28,7 @@ urlpatterns = [
# Aggregates # Aggregates
path('aggregates/', views.AggregateListView.as_view(), name='aggregate_list'), path('aggregates/', views.AggregateListView.as_view(), name='aggregate_list'),
path('aggregates/add/', views.AggregateCreateView.as_view(), name='aggregate_add'), path('aggregates/add/', views.AggregateEditView.as_view(), name='aggregate_add'),
path('aggregates/import/', views.AggregateBulkImportView.as_view(), name='aggregate_import'), path('aggregates/import/', views.AggregateBulkImportView.as_view(), name='aggregate_import'),
path('aggregates/edit/', views.AggregateBulkEditView.as_view(), name='aggregate_bulk_edit'), path('aggregates/edit/', views.AggregateBulkEditView.as_view(), name='aggregate_bulk_edit'),
path('aggregates/delete/', views.AggregateBulkDeleteView.as_view(), name='aggregate_bulk_delete'), path('aggregates/delete/', views.AggregateBulkDeleteView.as_view(), name='aggregate_bulk_delete'),
@ -39,7 +39,7 @@ urlpatterns = [
# Roles # Roles
path('roles/', views.RoleListView.as_view(), name='role_list'), path('roles/', views.RoleListView.as_view(), name='role_list'),
path('roles/add/', views.RoleCreateView.as_view(), name='role_add'), path('roles/add/', views.RoleEditView.as_view(), name='role_add'),
path('roles/import/', views.RoleBulkImportView.as_view(), name='role_import'), path('roles/import/', views.RoleBulkImportView.as_view(), name='role_import'),
path('roles/delete/', views.RoleBulkDeleteView.as_view(), name='role_bulk_delete'), path('roles/delete/', views.RoleBulkDeleteView.as_view(), name='role_bulk_delete'),
path('roles/<slug:slug>/edit/', views.RoleEditView.as_view(), name='role_edit'), path('roles/<slug:slug>/edit/', views.RoleEditView.as_view(), name='role_edit'),
@ -47,7 +47,7 @@ urlpatterns = [
# Prefixes # Prefixes
path('prefixes/', views.PrefixListView.as_view(), name='prefix_list'), path('prefixes/', views.PrefixListView.as_view(), name='prefix_list'),
path('prefixes/add/', views.PrefixCreateView.as_view(), name='prefix_add'), path('prefixes/add/', views.PrefixEditView.as_view(), name='prefix_add'),
path('prefixes/import/', views.PrefixBulkImportView.as_view(), name='prefix_import'), path('prefixes/import/', views.PrefixBulkImportView.as_view(), name='prefix_import'),
path('prefixes/edit/', views.PrefixBulkEditView.as_view(), name='prefix_bulk_edit'), path('prefixes/edit/', views.PrefixBulkEditView.as_view(), name='prefix_bulk_edit'),
path('prefixes/delete/', views.PrefixBulkDeleteView.as_view(), name='prefix_bulk_delete'), path('prefixes/delete/', views.PrefixBulkDeleteView.as_view(), name='prefix_bulk_delete'),
@ -60,7 +60,7 @@ urlpatterns = [
# IP addresses # IP addresses
path('ip-addresses/', views.IPAddressListView.as_view(), name='ipaddress_list'), path('ip-addresses/', views.IPAddressListView.as_view(), name='ipaddress_list'),
path('ip-addresses/add/', views.IPAddressCreateView.as_view(), name='ipaddress_add'), path('ip-addresses/add/', views.IPAddressEditView.as_view(), name='ipaddress_add'),
path('ip-addresses/bulk-add/', views.IPAddressBulkCreateView.as_view(), name='ipaddress_bulk_add'), path('ip-addresses/bulk-add/', views.IPAddressBulkCreateView.as_view(), name='ipaddress_bulk_add'),
path('ip-addresses/import/', views.IPAddressBulkImportView.as_view(), name='ipaddress_import'), path('ip-addresses/import/', views.IPAddressBulkImportView.as_view(), name='ipaddress_import'),
path('ip-addresses/edit/', views.IPAddressBulkEditView.as_view(), name='ipaddress_bulk_edit'), path('ip-addresses/edit/', views.IPAddressBulkEditView.as_view(), name='ipaddress_bulk_edit'),
@ -73,7 +73,7 @@ urlpatterns = [
# VLAN groups # VLAN groups
path('vlan-groups/', views.VLANGroupListView.as_view(), name='vlangroup_list'), path('vlan-groups/', views.VLANGroupListView.as_view(), name='vlangroup_list'),
path('vlan-groups/add/', views.VLANGroupCreateView.as_view(), name='vlangroup_add'), path('vlan-groups/add/', views.VLANGroupEditView.as_view(), name='vlangroup_add'),
path('vlan-groups/import/', views.VLANGroupBulkImportView.as_view(), name='vlangroup_import'), path('vlan-groups/import/', views.VLANGroupBulkImportView.as_view(), name='vlangroup_import'),
path('vlan-groups/delete/', views.VLANGroupBulkDeleteView.as_view(), name='vlangroup_bulk_delete'), path('vlan-groups/delete/', views.VLANGroupBulkDeleteView.as_view(), name='vlangroup_bulk_delete'),
path('vlan-groups/<int:pk>/edit/', views.VLANGroupEditView.as_view(), name='vlangroup_edit'), path('vlan-groups/<int:pk>/edit/', views.VLANGroupEditView.as_view(), name='vlangroup_edit'),
@ -82,7 +82,7 @@ urlpatterns = [
# VLANs # VLANs
path('vlans/', views.VLANListView.as_view(), name='vlan_list'), path('vlans/', views.VLANListView.as_view(), name='vlan_list'),
path('vlans/add/', views.VLANCreateView.as_view(), name='vlan_add'), path('vlans/add/', views.VLANEditView.as_view(), name='vlan_add'),
path('vlans/import/', views.VLANBulkImportView.as_view(), name='vlan_import'), path('vlans/import/', views.VLANBulkImportView.as_view(), name='vlan_import'),
path('vlans/edit/', views.VLANBulkEditView.as_view(), name='vlan_bulk_edit'), path('vlans/edit/', views.VLANBulkEditView.as_view(), name='vlan_bulk_edit'),
path('vlans/delete/', views.VLANBulkDeleteView.as_view(), name='vlan_bulk_delete'), path('vlans/delete/', views.VLANBulkDeleteView.as_view(), name='vlan_bulk_delete'),

View File

@ -134,18 +134,13 @@ class VRFView(PermissionRequiredMixin, View):
}) })
class VRFCreateView(PermissionRequiredMixin, ObjectEditView): class VRFEditView(ObjectEditView):
permission_required = 'ipam.add_vrf'
queryset = VRF.objects.all() queryset = VRF.objects.all()
model_form = forms.VRFForm model_form = forms.VRFForm
template_name = 'ipam/vrf_edit.html' template_name = 'ipam/vrf_edit.html'
default_return_url = 'ipam:vrf_list' default_return_url = 'ipam:vrf_list'
class VRFEditView(VRFCreateView):
permission_required = 'ipam.change_vrf'
class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView): class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_vrf' permission_required = 'ipam.delete_vrf'
queryset = VRF.objects.all() queryset = VRF.objects.all()
@ -257,17 +252,12 @@ class RIRListView(ObjectListView):
return rirs return rirs
class RIRCreateView(PermissionRequiredMixin, ObjectEditView): class RIREditView(ObjectEditView):
permission_required = 'ipam.add_rir'
queryset = RIR.objects.all() queryset = RIR.objects.all()
model_form = forms.RIRForm model_form = forms.RIRForm
default_return_url = 'ipam:rir_list' default_return_url = 'ipam:rir_list'
class RIREditView(RIRCreateView):
permission_required = 'ipam.change_rir'
class RIRBulkImportView(PermissionRequiredMixin, BulkImportView): class RIRBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'ipam.add_rir' permission_required = 'ipam.add_rir'
queryset = RIR.objects.all() queryset = RIR.objects.all()
@ -359,18 +349,13 @@ class AggregateView(PermissionRequiredMixin, View):
}) })
class AggregateCreateView(PermissionRequiredMixin, ObjectEditView): class AggregateEditView(ObjectEditView):
permission_required = 'ipam.add_aggregate'
queryset = Aggregate.objects.all() queryset = Aggregate.objects.all()
model_form = forms.AggregateForm model_form = forms.AggregateForm
template_name = 'ipam/aggregate_edit.html' template_name = 'ipam/aggregate_edit.html'
default_return_url = 'ipam:aggregate_list' default_return_url = 'ipam:aggregate_list'
class AggregateEditView(AggregateCreateView):
permission_required = 'ipam.change_aggregate'
class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView): class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_aggregate' permission_required = 'ipam.delete_aggregate'
queryset = Aggregate.objects.all() queryset = Aggregate.objects.all()
@ -411,17 +396,12 @@ class RoleListView(ObjectListView):
table = tables.RoleTable table = tables.RoleTable
class RoleCreateView(PermissionRequiredMixin, ObjectEditView): class RoleEditView(ObjectEditView):
permission_required = 'ipam.add_role'
queryset = Role.objects.all() queryset = Role.objects.all()
model_form = forms.RoleForm model_form = forms.RoleForm
default_return_url = 'ipam:role_list' default_return_url = 'ipam:role_list'
class RoleEditView(RoleCreateView):
permission_required = 'ipam.change_role'
class RoleBulkImportView(PermissionRequiredMixin, BulkImportView): class RoleBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'ipam.add_role' permission_required = 'ipam.add_role'
queryset = Role.objects.all() queryset = Role.objects.all()
@ -585,18 +565,13 @@ class PrefixIPAddressesView(PermissionRequiredMixin, View):
}) })
class PrefixCreateView(ObjectPermissionRequiredMixin, ObjectEditView): class PrefixEditView(ObjectEditView):
permission_required = 'ipam.add_prefix'
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
model_form = forms.PrefixForm model_form = forms.PrefixForm
template_name = 'ipam/prefix_edit.html' template_name = 'ipam/prefix_edit.html'
default_return_url = 'ipam:prefix_list' default_return_url = 'ipam:prefix_list'
class PrefixEditView(PrefixCreateView):
permission_required = 'ipam.change_prefix'
class PrefixDeleteView(ObjectPermissionRequiredMixin, ObjectDeleteView): class PrefixDeleteView(ObjectPermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_prefix' permission_required = 'ipam.delete_prefix'
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
@ -696,8 +671,7 @@ class IPAddressView(PermissionRequiredMixin, View):
}) })
class IPAddressCreateView(PermissionRequiredMixin, ObjectEditView): class IPAddressEditView(ObjectEditView):
permission_required = 'ipam.add_ipaddress'
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
model_form = forms.IPAddressForm model_form = forms.IPAddressForm
template_name = 'ipam/ipaddress_edit.html' template_name = 'ipam/ipaddress_edit.html'
@ -715,10 +689,6 @@ class IPAddressCreateView(PermissionRequiredMixin, ObjectEditView):
return obj return obj
class IPAddressEditView(IPAddressCreateView):
permission_required = 'ipam.change_ipaddress'
class IPAddressAssignView(PermissionRequiredMixin, View): class IPAddressAssignView(PermissionRequiredMixin, View):
""" """
Search for IPAddresses to be assigned to an Interface. Search for IPAddresses to be assigned to an Interface.
@ -814,17 +784,13 @@ class VLANGroupListView(ObjectListView):
table = tables.VLANGroupTable table = tables.VLANGroupTable
class VLANGroupCreateView(PermissionRequiredMixin, ObjectEditView): class VLANGroupEditView(ObjectEditView):
permission_required = 'ipam.add_vlangroup' permission_required = 'ipam.add_vlangroup'
queryset = VLANGroup.objects.all() queryset = VLANGroup.objects.all()
model_form = forms.VLANGroupForm model_form = forms.VLANGroupForm
default_return_url = 'ipam:vlangroup_list' default_return_url = 'ipam:vlangroup_list'
class VLANGroupEditView(VLANGroupCreateView):
permission_required = 'ipam.change_vlangroup'
class VLANGroupBulkImportView(PermissionRequiredMixin, BulkImportView): class VLANGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'ipam.add_vlangroup' permission_required = 'ipam.add_vlangroup'
queryset = VLANGroup.objects.all() queryset = VLANGroup.objects.all()
@ -930,18 +896,13 @@ class VLANMembersView(PermissionRequiredMixin, View):
}) })
class VLANCreateView(PermissionRequiredMixin, ObjectEditView): class VLANEditView(ObjectEditView):
permission_required = 'ipam.add_vlan'
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
model_form = forms.VLANForm model_form = forms.VLANForm
template_name = 'ipam/vlan_edit.html' template_name = 'ipam/vlan_edit.html'
default_return_url = 'ipam:vlan_list' default_return_url = 'ipam:vlan_list'
class VLANEditView(VLANCreateView):
permission_required = 'ipam.change_vlan'
class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView): class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_vlan' permission_required = 'ipam.delete_vlan'
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
@ -997,8 +958,7 @@ class ServiceView(PermissionRequiredMixin, View):
}) })
class ServiceCreateView(PermissionRequiredMixin, ObjectEditView): class ServiceEditView(ObjectEditView):
permission_required = 'ipam.add_service'
queryset = Service.objects.all() queryset = Service.objects.all()
model_form = forms.ServiceForm model_form = forms.ServiceForm
template_name = 'ipam/service_edit.html' template_name = 'ipam/service_edit.html'
@ -1022,10 +982,6 @@ class ServiceBulkImportView(PermissionRequiredMixin, BulkImportView):
default_return_url = 'ipam:service_list' default_return_url = 'ipam:service_list'
class ServiceEditView(ServiceCreateView):
permission_required = 'ipam.change_service'
class ServiceDeleteView(PermissionRequiredMixin, ObjectDeleteView): class ServiceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_service' permission_required = 'ipam.delete_service'
queryset = Service.objects.all() queryset = Service.objects.all()

View File

@ -9,7 +9,7 @@ urlpatterns = [
# Secret roles # Secret roles
path('secret-roles/', views.SecretRoleListView.as_view(), name='secretrole_list'), path('secret-roles/', views.SecretRoleListView.as_view(), name='secretrole_list'),
path('secret-roles/add/', views.SecretRoleCreateView.as_view(), name='secretrole_add'), path('secret-roles/add/', views.SecretRoleEditView.as_view(), name='secretrole_add'),
path('secret-roles/import/', views.SecretRoleBulkImportView.as_view(), name='secretrole_import'), path('secret-roles/import/', views.SecretRoleBulkImportView.as_view(), name='secretrole_import'),
path('secret-roles/delete/', views.SecretRoleBulkDeleteView.as_view(), name='secretrole_bulk_delete'), path('secret-roles/delete/', views.SecretRoleBulkDeleteView.as_view(), name='secretrole_bulk_delete'),
path('secret-roles/<slug:slug>/edit/', views.SecretRoleEditView.as_view(), name='secretrole_edit'), path('secret-roles/<slug:slug>/edit/', views.SecretRoleEditView.as_view(), name='secretrole_edit'),

View File

@ -35,17 +35,12 @@ class SecretRoleListView(ObjectListView):
table = tables.SecretRoleTable table = tables.SecretRoleTable
class SecretRoleCreateView(PermissionRequiredMixin, ObjectEditView): class SecretRoleEditView(ObjectEditView):
permission_required = 'secrets.add_secretrole'
queryset = SecretRole.objects.all() queryset = SecretRole.objects.all()
model_form = forms.SecretRoleForm model_form = forms.SecretRoleForm
default_return_url = 'secrets:secretrole_list' default_return_url = 'secrets:secretrole_list'
class SecretRoleEditView(SecretRoleCreateView):
permission_required = 'secrets.change_secretrole'
class SecretRoleBulkImportView(PermissionRequiredMixin, BulkImportView): class SecretRoleBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'secrets.add_secretrole' permission_required = 'secrets.add_secretrole'
queryset = SecretRole.objects.all() queryset = SecretRole.objects.all()

View File

@ -9,7 +9,7 @@ urlpatterns = [
# Tenant groups # Tenant groups
path('tenant-groups/', views.TenantGroupListView.as_view(), name='tenantgroup_list'), path('tenant-groups/', views.TenantGroupListView.as_view(), name='tenantgroup_list'),
path('tenant-groups/add/', views.TenantGroupCreateView.as_view(), name='tenantgroup_add'), path('tenant-groups/add/', views.TenantGroupEditView.as_view(), name='tenantgroup_add'),
path('tenant-groups/import/', views.TenantGroupBulkImportView.as_view(), name='tenantgroup_import'), path('tenant-groups/import/', views.TenantGroupBulkImportView.as_view(), name='tenantgroup_import'),
path('tenant-groups/delete/', views.TenantGroupBulkDeleteView.as_view(), name='tenantgroup_bulk_delete'), path('tenant-groups/delete/', views.TenantGroupBulkDeleteView.as_view(), name='tenantgroup_bulk_delete'),
path('tenant-groups/<slug:slug>/edit/', views.TenantGroupEditView.as_view(), name='tenantgroup_edit'), path('tenant-groups/<slug:slug>/edit/', views.TenantGroupEditView.as_view(), name='tenantgroup_edit'),
@ -17,7 +17,7 @@ urlpatterns = [
# Tenants # Tenants
path('tenants/', views.TenantListView.as_view(), name='tenant_list'), path('tenants/', views.TenantListView.as_view(), name='tenant_list'),
path('tenants/add/', views.TenantCreateView.as_view(), name='tenant_add'), path('tenants/add/', views.TenantEditView.as_view(), name='tenant_add'),
path('tenants/import/', views.TenantBulkImportView.as_view(), name='tenant_import'), path('tenants/import/', views.TenantBulkImportView.as_view(), name='tenant_import'),
path('tenants/edit/', views.TenantBulkEditView.as_view(), name='tenant_bulk_edit'), path('tenants/edit/', views.TenantBulkEditView.as_view(), name='tenant_bulk_edit'),
path('tenants/delete/', views.TenantBulkDeleteView.as_view(), name='tenant_bulk_delete'), path('tenants/delete/', views.TenantBulkDeleteView.as_view(), name='tenant_bulk_delete'),

View File

@ -29,17 +29,12 @@ class TenantGroupListView(ObjectListView):
table = tables.TenantGroupTable table = tables.TenantGroupTable
class TenantGroupCreateView(PermissionRequiredMixin, ObjectEditView): class TenantGroupEditView(ObjectEditView):
permission_required = 'tenancy.add_tenantgroup'
queryset = TenantGroup.objects.all() queryset = TenantGroup.objects.all()
model_form = forms.TenantGroupForm model_form = forms.TenantGroupForm
default_return_url = 'tenancy:tenantgroup_list' default_return_url = 'tenancy:tenantgroup_list'
class TenantGroupEditView(TenantGroupCreateView):
permission_required = 'tenancy.change_tenantgroup'
class TenantGroupBulkImportView(PermissionRequiredMixin, BulkImportView): class TenantGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'tenancy.add_tenantgroup' permission_required = 'tenancy.add_tenantgroup'
queryset = TenantGroup.objects.all() queryset = TenantGroup.objects.all()
@ -92,18 +87,13 @@ class TenantView(PermissionRequiredMixin, View):
}) })
class TenantCreateView(PermissionRequiredMixin, ObjectEditView): class TenantEditView(ObjectEditView):
permission_required = 'tenancy.add_tenant'
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
model_form = forms.TenantForm model_form = forms.TenantForm
template_name = 'tenancy/tenant_edit.html' template_name = 'tenancy/tenant_edit.html'
default_return_url = 'tenancy:tenant_list' default_return_url = 'tenancy:tenant_list'
class TenantEditView(TenantCreateView):
permission_required = 'tenancy.change_tenant'
class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView): class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'tenancy.delete_tenant' permission_required = 'tenancy.delete_tenant'
queryset = Tenant.objects.all() queryset = Tenant.objects.all()

View File

@ -278,7 +278,7 @@ class ObjectListView(ObjectPermissionRequiredMixin, View):
return {} return {}
class ObjectEditView(GetReturnURLMixin, View): class ObjectEditView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
""" """
Create or edit a single object. Create or edit a single object.
@ -290,6 +290,12 @@ class ObjectEditView(GetReturnURLMixin, View):
model_form = None model_form = None
template_name = 'utilities/obj_edit.html' template_name = 'utilities/obj_edit.html'
def get_required_permission(self):
# Determine required permission based on whether we are editing an existing object
if self.obj.pk is None:
return get_permission_for_model(self.queryset.model, 'add')
return get_permission_for_model(self.queryset.model, 'change')
def get_object(self, kwargs): def get_object(self, kwargs):
# Look up an existing object by slug or PK, if provided. # Look up an existing object by slug or PK, if provided.
if 'slug' in kwargs: if 'slug' in kwargs:

View File

@ -1,7 +1,7 @@
from django.urls import path from django.urls import path
from extras.views import ObjectChangeLogView from extras.views import ObjectChangeLogView
from ipam.views import ServiceCreateView from ipam.views import ServiceEditView
from . import views from . import views
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
@ -10,7 +10,7 @@ urlpatterns = [
# Cluster types # Cluster types
path('cluster-types/', views.ClusterTypeListView.as_view(), name='clustertype_list'), path('cluster-types/', views.ClusterTypeListView.as_view(), name='clustertype_list'),
path('cluster-types/add/', views.ClusterTypeCreateView.as_view(), name='clustertype_add'), path('cluster-types/add/', views.ClusterTypeEditView.as_view(), name='clustertype_add'),
path('cluster-types/import/', views.ClusterTypeBulkImportView.as_view(), name='clustertype_import'), path('cluster-types/import/', views.ClusterTypeBulkImportView.as_view(), name='clustertype_import'),
path('cluster-types/delete/', views.ClusterTypeBulkDeleteView.as_view(), name='clustertype_bulk_delete'), path('cluster-types/delete/', views.ClusterTypeBulkDeleteView.as_view(), name='clustertype_bulk_delete'),
path('cluster-types/<slug:slug>/edit/', views.ClusterTypeEditView.as_view(), name='clustertype_edit'), path('cluster-types/<slug:slug>/edit/', views.ClusterTypeEditView.as_view(), name='clustertype_edit'),
@ -18,7 +18,7 @@ urlpatterns = [
# Cluster groups # Cluster groups
path('cluster-groups/', views.ClusterGroupListView.as_view(), name='clustergroup_list'), path('cluster-groups/', views.ClusterGroupListView.as_view(), name='clustergroup_list'),
path('cluster-groups/add/', views.ClusterGroupCreateView.as_view(), name='clustergroup_add'), path('cluster-groups/add/', views.ClusterGroupEditView.as_view(), name='clustergroup_add'),
path('cluster-groups/import/', views.ClusterGroupBulkImportView.as_view(), name='clustergroup_import'), path('cluster-groups/import/', views.ClusterGroupBulkImportView.as_view(), name='clustergroup_import'),
path('cluster-groups/delete/', views.ClusterGroupBulkDeleteView.as_view(), name='clustergroup_bulk_delete'), path('cluster-groups/delete/', views.ClusterGroupBulkDeleteView.as_view(), name='clustergroup_bulk_delete'),
path('cluster-groups/<slug:slug>/edit/', views.ClusterGroupEditView.as_view(), name='clustergroup_edit'), path('cluster-groups/<slug:slug>/edit/', views.ClusterGroupEditView.as_view(), name='clustergroup_edit'),
@ -26,7 +26,7 @@ urlpatterns = [
# Clusters # Clusters
path('clusters/', views.ClusterListView.as_view(), name='cluster_list'), path('clusters/', views.ClusterListView.as_view(), name='cluster_list'),
path('clusters/add/', views.ClusterCreateView.as_view(), name='cluster_add'), path('clusters/add/', views.ClusterEditView.as_view(), name='cluster_add'),
path('clusters/import/', views.ClusterBulkImportView.as_view(), name='cluster_import'), path('clusters/import/', views.ClusterBulkImportView.as_view(), name='cluster_import'),
path('clusters/edit/', views.ClusterBulkEditView.as_view(), name='cluster_bulk_edit'), path('clusters/edit/', views.ClusterBulkEditView.as_view(), name='cluster_bulk_edit'),
path('clusters/delete/', views.ClusterBulkDeleteView.as_view(), name='cluster_bulk_delete'), path('clusters/delete/', views.ClusterBulkDeleteView.as_view(), name='cluster_bulk_delete'),
@ -39,7 +39,7 @@ urlpatterns = [
# Virtual machines # Virtual machines
path('virtual-machines/', views.VirtualMachineListView.as_view(), name='virtualmachine_list'), path('virtual-machines/', views.VirtualMachineListView.as_view(), name='virtualmachine_list'),
path('virtual-machines/add/', views.VirtualMachineCreateView.as_view(), name='virtualmachine_add'), path('virtual-machines/add/', views.VirtualMachineEditView.as_view(), name='virtualmachine_add'),
path('virtual-machines/import/', views.VirtualMachineBulkImportView.as_view(), name='virtualmachine_import'), path('virtual-machines/import/', views.VirtualMachineBulkImportView.as_view(), name='virtualmachine_import'),
path('virtual-machines/edit/', views.VirtualMachineBulkEditView.as_view(), name='virtualmachine_bulk_edit'), path('virtual-machines/edit/', views.VirtualMachineBulkEditView.as_view(), name='virtualmachine_bulk_edit'),
path('virtual-machines/delete/', views.VirtualMachineBulkDeleteView.as_view(), name='virtualmachine_bulk_delete'), path('virtual-machines/delete/', views.VirtualMachineBulkDeleteView.as_view(), name='virtualmachine_bulk_delete'),
@ -48,7 +48,7 @@ urlpatterns = [
path('virtual-machines/<int:pk>/delete/', views.VirtualMachineDeleteView.as_view(), name='virtualmachine_delete'), path('virtual-machines/<int:pk>/delete/', views.VirtualMachineDeleteView.as_view(), name='virtualmachine_delete'),
path('virtual-machines/<int:pk>/config-context/', views.VirtualMachineConfigContextView.as_view(), name='virtualmachine_configcontext'), path('virtual-machines/<int:pk>/config-context/', views.VirtualMachineConfigContextView.as_view(), name='virtualmachine_configcontext'),
path('virtual-machines/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='virtualmachine_changelog', kwargs={'model': VirtualMachine}), path('virtual-machines/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='virtualmachine_changelog', kwargs={'model': VirtualMachine}),
path('virtual-machines/<int:virtualmachine>/services/assign/', ServiceCreateView.as_view(), name='virtualmachine_service_assign'), path('virtual-machines/<int:virtualmachine>/services/assign/', ServiceEditView.as_view(), name='virtualmachine_service_assign'),
# VM interfaces # VM interfaces
path('interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'), path('interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'),

View File

@ -27,17 +27,12 @@ class ClusterTypeListView(ObjectListView):
table = tables.ClusterTypeTable table = tables.ClusterTypeTable
class ClusterTypeCreateView(PermissionRequiredMixin, ObjectEditView): class ClusterTypeEditView(ObjectEditView):
permission_required = 'virtualization.add_clustertype'
queryset = ClusterType.objects.all() queryset = ClusterType.objects.all()
model_form = forms.ClusterTypeForm model_form = forms.ClusterTypeForm
default_return_url = 'virtualization:clustertype_list' default_return_url = 'virtualization:clustertype_list'
class ClusterTypeEditView(ClusterTypeCreateView):
permission_required = 'virtualization.change_clustertype'
class ClusterTypeBulkImportView(PermissionRequiredMixin, BulkImportView): class ClusterTypeBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'virtualization.add_clustertype' permission_required = 'virtualization.add_clustertype'
queryset = ClusterType.objects.all() queryset = ClusterType.objects.all()
@ -62,17 +57,12 @@ class ClusterGroupListView(ObjectListView):
table = tables.ClusterGroupTable table = tables.ClusterGroupTable
class ClusterGroupCreateView(PermissionRequiredMixin, ObjectEditView): class ClusterGroupEditView(ObjectEditView):
permission_required = 'virtualization.add_clustergroup'
queryset = ClusterGroup.objects.all() queryset = ClusterGroup.objects.all()
model_form = forms.ClusterGroupForm model_form = forms.ClusterGroupForm
default_return_url = 'virtualization:clustergroup_list' default_return_url = 'virtualization:clustergroup_list'
class ClusterGroupEditView(ClusterGroupCreateView):
permission_required = 'virtualization.change_clustergroup'
class ClusterGroupBulkImportView(PermissionRequiredMixin, BulkImportView): class ClusterGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'virtualization.add_clustergroup' permission_required = 'virtualization.add_clustergroup'
queryset = ClusterGroup.objects.all() queryset = ClusterGroup.objects.all()
@ -118,17 +108,12 @@ class ClusterView(PermissionRequiredMixin, View):
}) })
class ClusterCreateView(PermissionRequiredMixin, ObjectEditView): class ClusterEditView(ObjectEditView):
permission_required = 'virtualization.add_cluster'
template_name = 'virtualization/cluster_edit.html' template_name = 'virtualization/cluster_edit.html'
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
model_form = forms.ClusterForm model_form = forms.ClusterForm
class ClusterEditView(ClusterCreateView):
permission_required = 'virtualization.change_cluster'
class ClusterDeleteView(PermissionRequiredMixin, ObjectDeleteView): class ClusterDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'virtualization.delete_cluster' permission_required = 'virtualization.delete_cluster'
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
@ -278,18 +263,13 @@ class VirtualMachineConfigContextView(PermissionRequiredMixin, ObjectConfigConte
base_template = 'virtualization/virtualmachine.html' base_template = 'virtualization/virtualmachine.html'
class VirtualMachineCreateView(PermissionRequiredMixin, ObjectEditView): class VirtualMachineEditView(ObjectEditView):
permission_required = 'virtualization.add_virtualmachine'
queryset = VirtualMachine.objects.all() queryset = VirtualMachine.objects.all()
model_form = forms.VirtualMachineForm model_form = forms.VirtualMachineForm
template_name = 'virtualization/virtualmachine_edit.html' template_name = 'virtualization/virtualmachine_edit.html'
default_return_url = 'virtualization:virtualmachine_list' default_return_url = 'virtualization:virtualmachine_list'
class VirtualMachineEditView(VirtualMachineCreateView):
permission_required = 'virtualization.change_virtualmachine'
class VirtualMachineDeleteView(PermissionRequiredMixin, ObjectDeleteView): class VirtualMachineDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'virtualization.delete_virtualmachine' permission_required = 'virtualization.delete_virtualmachine'
queryset = VirtualMachine.objects.all() queryset = VirtualMachine.objects.all()
@ -333,8 +313,7 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView):
template_name = 'virtualization/virtualmachine_component_add.html' template_name = 'virtualization/virtualmachine_component_add.html'
class InterfaceEditView(PermissionRequiredMixin, ObjectEditView): class InterfaceEditView(ObjectEditView):
permission_required = 'dcim.change_interface'
queryset = Interface.objects.all() queryset = Interface.objects.all()
model_form = forms.InterfaceForm model_form = forms.InterfaceForm
template_name = 'virtualization/interface_edit.html' template_name = 'virtualization/interface_edit.html'