Explorar o código

Transition BulkRenameView, BulkDisconnectView to use ObjectPermissionRequiredMixin

Jeremy Stretch %!s(int64=5) %!d(string=hai) anos
pai
achega
49b780358e
Modificáronse 1 ficheiros con 31 adicións e 37 borrados
  1. 31 37
      netbox/dcim/views.py

+ 31 - 37
netbox/dcim/views.py

@@ -23,6 +23,7 @@ from ipam.models import Prefix, VLAN
 from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
 from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
 from utilities.forms import ConfirmationForm
 from utilities.forms import ConfirmationForm
 from utilities.paginator import EnhancedPaginator
 from utilities.paginator import EnhancedPaginator
+from utilities.permissions import get_permission_for_model
 from utilities.utils import csv_format
 from utilities.utils import csv_format
 from utilities.views import (
 from utilities.views import (
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, GetReturnURLMixin,
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, GetReturnURLMixin,
@@ -41,7 +42,7 @@ from .models import (
 )
 )
 
 
 
 
-class BulkRenameView(GetReturnURLMixin, View):
+class BulkRenameView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
     """
     """
     An extendable view for renaming device components in bulk.
     An extendable view for renaming device components in bulk.
     """
     """
@@ -49,9 +50,10 @@ class BulkRenameView(GetReturnURLMixin, View):
     form = None
     form = None
     template_name = 'dcim/bulk_rename.html'
     template_name = 'dcim/bulk_rename.html'
 
 
-    def post(self, request):
+    def get_required_permission(self):
+        return get_permission_for_model(self.queryset.model, 'change')
 
 
-        model = self.queryset.model
+    def post(self, request):
 
 
         if '_preview' in request.POST or '_apply' in request.POST:
         if '_preview' in request.POST or '_apply' in request.POST:
             form = self.form(request.POST, initial={'pk': request.POST.getlist('pk')})
             form = self.form(request.POST, initial={'pk': request.POST.getlist('pk')})
@@ -76,7 +78,7 @@ class BulkRenameView(GetReturnURLMixin, View):
                         obj.save()
                         obj.save()
                     messages.success(request, "Renamed {} {}".format(
                     messages.success(request, "Renamed {} {}".format(
                         len(selected_objects),
                         len(selected_objects),
-                        model._meta.verbose_name_plural
+                        self.queryset.model._meta.verbose_name_plural
                     ))
                     ))
                     return redirect(self.get_return_url(request))
                     return redirect(self.get_return_url(request))
 
 
@@ -86,7 +88,7 @@ class BulkRenameView(GetReturnURLMixin, View):
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {
             'form': form,
             'form': form,
-            'obj_type_plural': model._meta.verbose_name_plural,
+            'obj_type_plural': self.queryset.model._meta.verbose_name_plural,
             'selected_objects': selected_objects,
             'selected_objects': selected_objects,
             'return_url': self.get_return_url(request),
             'return_url': self.get_return_url(request),
         })
         })
@@ -96,10 +98,13 @@ class BulkDisconnectView(GetReturnURLMixin, View):
     """
     """
     An extendable view for disconnection console/power/interface components in bulk.
     An extendable view for disconnection console/power/interface components in bulk.
     """
     """
-    model = None
+    queryset = None
     form = None
     form = None
     template_name = 'dcim/bulk_disconnect.html'
     template_name = 'dcim/bulk_disconnect.html'
 
 
+    def get_required_permission(self):
+        return get_permission_for_model(self.queryset.model, 'change')
+
     def post(self, request):
     def post(self, request):
 
 
         selected_objects = []
         selected_objects = []
@@ -113,25 +118,25 @@ class BulkDisconnectView(GetReturnURLMixin, View):
                 with transaction.atomic():
                 with transaction.atomic():
 
 
                     count = 0
                     count = 0
-                    for obj in self.model.objects.filter(pk__in=form.cleaned_data['pk']):
+                    for obj in self.queryset.filter(pk__in=form.cleaned_data['pk']):
                         if obj.cable is None:
                         if obj.cable is None:
                             continue
                             continue
                         obj.cable.delete()
                         obj.cable.delete()
                         count += 1
                         count += 1
 
 
                 messages.success(request, "Disconnected {} {}".format(
                 messages.success(request, "Disconnected {} {}".format(
-                    count, self.model._meta.verbose_name_plural
+                    count, self.queryset.model._meta.verbose_name_plural
                 ))
                 ))
 
 
                 return redirect(return_url)
                 return redirect(return_url)
 
 
         else:
         else:
             form = self.form(initial={'pk': request.POST.getlist('pk')})
             form = self.form(initial={'pk': request.POST.getlist('pk')})
-            selected_objects = self.model.objects.filter(pk__in=form.initial['pk'])
+            selected_objects = self.queryset.filter(pk__in=form.initial['pk'])
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {
             'form': form,
             'form': form,
-            'obj_type_plural': self.model._meta.verbose_name_plural,
+            'obj_type_plural': self.queryset.model._meta.verbose_name_plural,
             'selected_objects': selected_objects,
             'selected_objects': selected_objects,
             'return_url': return_url,
             'return_url': return_url,
         })
         })
@@ -1285,15 +1290,13 @@ class ConsoleServerPortBulkEditView(BulkEditView):
     form = forms.ConsoleServerPortBulkEditForm
     form = forms.ConsoleServerPortBulkEditForm
 
 
 
 
-class ConsoleServerPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_consoleserverport'
+class ConsoleServerPortBulkRenameView(BulkRenameView):
     queryset = ConsoleServerPort.objects.all()
     queryset = ConsoleServerPort.objects.all()
     form = forms.ConsoleServerPortBulkRenameForm
     form = forms.ConsoleServerPortBulkRenameForm
 
 
 
 
-class ConsoleServerPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView):
-    permission_required = 'dcim.change_consoleserverport'
-    model = ConsoleServerPort
+class ConsoleServerPortBulkDisconnectView(BulkDisconnectView):
+    queryset = ConsoleServerPort.objects.all()
     form = forms.ConsoleServerPortBulkDisconnectForm
     form = forms.ConsoleServerPortBulkDisconnectForm
 
 
 
 
@@ -1397,15 +1400,13 @@ class PowerOutletBulkEditView(BulkEditView):
     form = forms.PowerOutletBulkEditForm
     form = forms.PowerOutletBulkEditForm
 
 
 
 
-class PowerOutletBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_poweroutlet'
+class PowerOutletBulkRenameView(BulkRenameView):
     queryset = PowerOutlet.objects.all()
     queryset = PowerOutlet.objects.all()
     form = forms.PowerOutletBulkRenameForm
     form = forms.PowerOutletBulkRenameForm
 
 
 
 
-class PowerOutletBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView):
-    permission_required = 'dcim.change_poweroutlet'
-    model = PowerOutlet
+class PowerOutletBulkDisconnectView(BulkDisconnectView):
+    queryset = PowerOutlet.objects.all()
     form = forms.PowerOutletBulkDisconnectForm
     form = forms.PowerOutletBulkDisconnectForm
 
 
 
 
@@ -1496,15 +1497,13 @@ class InterfaceBulkEditView(BulkEditView):
     form = forms.InterfaceBulkEditForm
     form = forms.InterfaceBulkEditForm
 
 
 
 
-class InterfaceBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_interface'
+class InterfaceBulkRenameView(BulkRenameView):
     queryset = Interface.objects.all()
     queryset = Interface.objects.all()
     form = forms.InterfaceBulkRenameForm
     form = forms.InterfaceBulkRenameForm
 
 
 
 
-class InterfaceBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView):
-    permission_required = 'dcim.change_interface'
-    model = Interface
+class InterfaceBulkDisconnectView(BulkDisconnectView):
+    queryset = Interface.objects.all()
     form = forms.InterfaceBulkDisconnectForm
     form = forms.InterfaceBulkDisconnectForm
 
 
 
 
@@ -1558,15 +1557,13 @@ class FrontPortBulkEditView(BulkEditView):
     form = forms.FrontPortBulkEditForm
     form = forms.FrontPortBulkEditForm
 
 
 
 
-class FrontPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_frontport'
+class FrontPortBulkRenameView(BulkRenameView):
     queryset = FrontPort.objects.all()
     queryset = FrontPort.objects.all()
     form = forms.FrontPortBulkRenameForm
     form = forms.FrontPortBulkRenameForm
 
 
 
 
-class FrontPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView):
-    permission_required = 'dcim.change_frontport'
-    model = FrontPort
+class FrontPortBulkDisconnectView(BulkDisconnectView):
+    queryset = FrontPort.objects.all()
     form = forms.FrontPortBulkDisconnectForm
     form = forms.FrontPortBulkDisconnectForm
 
 
 
 
@@ -1620,15 +1617,13 @@ class RearPortBulkEditView(BulkEditView):
     form = forms.RearPortBulkEditForm
     form = forms.RearPortBulkEditForm
 
 
 
 
-class RearPortBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_rearport'
+class RearPortBulkRenameView(BulkRenameView):
     queryset = RearPort.objects.all()
     queryset = RearPort.objects.all()
     form = forms.RearPortBulkRenameForm
     form = forms.RearPortBulkRenameForm
 
 
 
 
-class RearPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView):
-    permission_required = 'dcim.change_rearport'
-    model = RearPort
+class RearPortBulkDisconnectView(BulkDisconnectView):
+    queryset = RearPort.objects.all()
     form = forms.RearPortBulkDisconnectForm
     form = forms.RearPortBulkDisconnectForm
 
 
 
 
@@ -1753,8 +1748,7 @@ class DeviceBayBulkEditView(BulkEditView):
     form = forms.DeviceBayBulkEditForm
     form = forms.DeviceBayBulkEditForm
 
 
 
 
-class DeviceBayBulkRenameView(PermissionRequiredMixin, BulkRenameView):
-    permission_required = 'dcim.change_devicebay'
+class DeviceBayBulkRenameView(BulkRenameView):
     queryset = DeviceBay.objects.all()
     queryset = DeviceBay.objects.all()
     form = forms.DeviceBayBulkRenameForm
     form = forms.DeviceBayBulkRenameForm