diff --git a/netbox/dcim/models/__init__.py b/netbox/dcim/models/__init__.py index db8fd8cf3..1bd1a83ed 100644 --- a/netbox/dcim/models/__init__.py +++ b/netbox/dcim/models/__init__.py @@ -1729,7 +1729,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): filter = Q(device=self) if self.virtual_chassis and self.virtual_chassis.master == self: filter |= Q(device__virtual_chassis=self.virtual_chassis, mgmt_only=False) - return Interface.objects.filter(filter) + return Interface.objects.unrestricted().filter(filter) def get_cables(self, pk_list=False): """ diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 442c0cf47..028c658f7 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -495,13 +495,13 @@ class DeviceRoleTable(BaseTable): pk = ToggleColumn() device_count = tables.TemplateColumn( template_code=DEVICEROLE_DEVICE_COUNT, - accessor=Accessor('devices.count'), + accessor=Accessor('devices.unrestricted.count'), orderable=False, verbose_name='Devices' ) vm_count = tables.TemplateColumn( template_code=DEVICEROLE_VM_COUNT, - accessor=Accessor('virtual_machines.count'), + accessor=Accessor('virtual_machines.unrestricted.count'), orderable=False, verbose_name='VMs' ) diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index 83e185796..77ac36683 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -84,7 +84,7 @@ class PrefixViewSet(CustomFieldModelViewSet): The advisory lock decorator uses a PostgreSQL advisory lock to prevent this API from being invoked in parallel, which results in a race condition where multiple insertions can occur. """ - prefix = get_object_or_404(Prefix, pk=pk) + prefix = get_object_or_404(self.queryset, pk=pk) available_prefixes = prefix.get_available_prefixes() if request.method == 'POST': diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 537a8367a..ade7fc994 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -1,4 +1,5 @@ from django import forms +from django.contrib.contenttypes.models import ContentType from django.core.validators import MaxValueValidator, MinValueValidator from dcim.models import Device, Interface, Rack, Region, Site diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index 536e7d928..48884ba20 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -868,9 +868,9 @@ class VLANGroup(ChangeLoggedModel): """ Return the first available VLAN ID (1-4094) in the group. """ - vids = [vlan['vid'] for vlan in self.vlans.order_by('vid').values('vid')] + vlan_ids = VLAN.objects.unrestricted().filter(group=self).values_list('vid', flat=True) for i in range(1, 4095): - if i not in vids: + if i not in vlan_ids: return i return None diff --git a/netbox/ipam/tables.py b/netbox/ipam/tables.py index 72ac3eb45..83b5b92fa 100644 --- a/netbox/ipam/tables.py +++ b/netbox/ipam/tables.py @@ -103,7 +103,7 @@ VLAN_LINK = """ """ VLAN_PREFIXES = """ -{% for prefix in record.prefixes.all %} +{% for prefix in record.prefixes.unrestricted %} {{ prefix }}{% if not forloop.last %}
{% endif %} {% empty %} — @@ -283,13 +283,13 @@ class AggregateDetailTable(AggregateTable): class RoleTable(BaseTable): pk = ToggleColumn() prefix_count = tables.TemplateColumn( - accessor=Accessor('prefixes.count'), + accessor=Accessor('prefixes.unrestricted.count'), template_code=ROLE_PREFIX_COUNT, orderable=False, verbose_name='Prefixes' ) vlan_count = tables.TemplateColumn( - accessor=Accessor('vlans.count'), + accessor=Accessor('vlans.unrestricted.count'), template_code=ROLE_VLAN_COUNT, orderable=False, verbose_name='VLANs' diff --git a/netbox/ipam/tests/test_ordering.py b/netbox/ipam/tests/test_ordering.py index 690501e53..9427c0cdf 100644 --- a/netbox/ipam/tests/test_ordering.py +++ b/netbox/ipam/tests/test_ordering.py @@ -86,7 +86,7 @@ class PrefixOrderingTestCase(OrderingTestBase): Prefix.objects.bulk_create(prefixes) # Test - self._compare(Prefix.objects.all(), prefixes) + self._compare(Prefix.objects.unrestricted(), prefixes) def test_prefix_complex_ordering(self): """ @@ -122,7 +122,7 @@ class PrefixOrderingTestCase(OrderingTestBase): Prefix.objects.bulk_create(prefixes) # Test - self._compare(Prefix.objects.all(), prefixes) + self._compare(Prefix.objects.unrestricted(), prefixes) class IPAddressOrderingTestCase(OrderingTestBase): @@ -173,4 +173,4 @@ class IPAddressOrderingTestCase(OrderingTestBase): IPAddress.objects.bulk_create(addresses) # Test - self._compare(IPAddress.objects.all(), addresses) + self._compare(IPAddress.objects.unrestricted(), addresses) diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 5c0df3a16..b5abbe251 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -827,9 +827,15 @@ class ServiceEditView(ObjectEditView): def alter_obj(self, obj, request, url_args, url_kwargs): if 'device' in url_kwargs: - obj.device = get_object_or_404(Device, pk=url_kwargs['device']) + obj.device = get_object_or_404( + Device.objects.restrict(request.user), + pk=url_kwargs['device'] + ) elif 'virtualmachine' in url_kwargs: - obj.virtual_machine = get_object_or_404(VirtualMachine, pk=url_kwargs['virtualmachine']) + obj.virtual_machine = get_object_or_404( + VirtualMachine.objects.restrict(request.user), + pk=url_kwargs['virtualmachine'] + ) return obj def get_return_url(self, request, service):