Remove restriction enforcement from RestrictedQuerySet

This commit is contained in:
Jeremy Stretch
2020-07-23 12:48:03 -04:00
parent d23f97abc8
commit cb36f9fdb3
39 changed files with 491 additions and 554 deletions
+1 -2
View File
@@ -79,8 +79,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet):
class VMInterfaceViewSet(ModelViewSet):
queryset = VMInterface.objects.prefetch_related(
Prefetch('tagged_vlans', queryset=VLAN.objects.unrestricted()),
'virtual_machine', 'tags'
'virtual_machine', 'tags', 'tagged_vlans'
)
serializer_class = serializers.VMInterfaceSerializer
filterset_class = filters.VMInterfaceFilterSet
+25 -25
View File
@@ -40,45 +40,45 @@ class ClusterFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cr
label='Search',
)
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(),
queryset=Region.objects.all(),
field_name='site__region',
lookup_expr='in',
label='Region (ID)',
)
region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(),
queryset=Region.objects.all(),
field_name='site__region',
lookup_expr='in',
to_field_name='slug',
label='Region (slug)',
)
site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.unrestricted(),
queryset=Site.objects.all(),
label='Site (ID)',
)
site = django_filters.ModelMultipleChoiceFilter(
field_name='site__slug',
queryset=Site.objects.unrestricted(),
queryset=Site.objects.all(),
to_field_name='slug',
label='Site (slug)',
)
group_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterGroup.objects.unrestricted(),
queryset=ClusterGroup.objects.all(),
label='Parent group (ID)',
)
group = django_filters.ModelMultipleChoiceFilter(
field_name='group__slug',
queryset=ClusterGroup.objects.unrestricted(),
queryset=ClusterGroup.objects.all(),
to_field_name='slug',
label='Parent group (slug)',
)
type_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterType.objects.unrestricted(),
queryset=ClusterType.objects.all(),
label='Cluster type (ID)',
)
type = django_filters.ModelMultipleChoiceFilter(
field_name='type__slug',
queryset=ClusterType.objects.unrestricted(),
queryset=ClusterType.objects.all(),
to_field_name='slug',
label='Cluster type (slug)',
)
@@ -114,38 +114,38 @@ class VirtualMachineFilterSet(
)
cluster_group_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__group',
queryset=ClusterGroup.objects.unrestricted(),
queryset=ClusterGroup.objects.all(),
label='Cluster group (ID)',
)
cluster_group = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__group__slug',
queryset=ClusterGroup.objects.unrestricted(),
queryset=ClusterGroup.objects.all(),
to_field_name='slug',
label='Cluster group (slug)',
)
cluster_type_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__type',
queryset=ClusterType.objects.unrestricted(),
queryset=ClusterType.objects.all(),
label='Cluster type (ID)',
)
cluster_type = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__type__slug',
queryset=ClusterType.objects.unrestricted(),
queryset=ClusterType.objects.all(),
to_field_name='slug',
label='Cluster type (slug)',
)
cluster_id = django_filters.ModelMultipleChoiceFilter(
queryset=Cluster.objects.unrestricted(),
queryset=Cluster.objects.all(),
label='Cluster (ID)',
)
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(),
queryset=Region.objects.all(),
field_name='cluster__site__region',
lookup_expr='in',
label='Region (ID)',
)
region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.unrestricted(),
queryset=Region.objects.all(),
field_name='cluster__site__region',
lookup_expr='in',
to_field_name='slug',
@@ -153,32 +153,32 @@ class VirtualMachineFilterSet(
)
site_id = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__site',
queryset=Site.objects.unrestricted(),
queryset=Site.objects.all(),
label='Site (ID)',
)
site = django_filters.ModelMultipleChoiceFilter(
field_name='cluster__site__slug',
queryset=Site.objects.unrestricted(),
queryset=Site.objects.all(),
to_field_name='slug',
label='Site (slug)',
)
role_id = django_filters.ModelMultipleChoiceFilter(
queryset=DeviceRole.objects.unrestricted(),
queryset=DeviceRole.objects.all(),
label='Role (ID)',
)
role = django_filters.ModelMultipleChoiceFilter(
field_name='role__slug',
queryset=DeviceRole.objects.unrestricted(),
queryset=DeviceRole.objects.all(),
to_field_name='slug',
label='Role (slug)',
)
platform_id = django_filters.ModelMultipleChoiceFilter(
queryset=Platform.objects.unrestricted(),
queryset=Platform.objects.all(),
label='Platform (ID)',
)
platform = django_filters.ModelMultipleChoiceFilter(
field_name='platform__slug',
queryset=Platform.objects.unrestricted(),
queryset=Platform.objects.all(),
to_field_name='slug',
label='Platform (slug)',
)
@@ -208,23 +208,23 @@ class VMInterfaceFilterSet(BaseFilterSet):
)
cluster_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__cluster',
queryset=Cluster.objects.unrestricted(),
queryset=Cluster.objects.all(),
label='Cluster (ID)',
)
cluster = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__cluster__name',
queryset=Cluster.objects.unrestricted(),
queryset=Cluster.objects.all(),
to_field_name='name',
label='Cluster',
)
virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine',
queryset=VirtualMachine.objects.unrestricted(),
queryset=VirtualMachine.objects.all(),
label='Virtual machine (ID)',
)
virtual_machine = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__name',
queryset=VirtualMachine.objects.unrestricted(),
queryset=VirtualMachine.objects.all(),
to_field_name='name',
label='Virtual machine',
)
+2 -2
View File
@@ -177,7 +177,7 @@ class Cluster(ChangeLoggedModel, CustomFieldModel):
# If the Cluster is assigned to a Site, verify that all host Devices belong to that Site.
if self.pk and self.site:
nonsite_devices = Device.objects.unrestricted().filter(cluster=self).exclude(site=self.site).count()
nonsite_devices = Device.objects.filter(cluster=self).exclude(site=self.site).count()
if nonsite_devices:
raise ValidationError({
'site': "{} devices are assigned as hosts for this cluster but are not in site {}".format(
@@ -317,7 +317,7 @@ class VirtualMachine(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
# Check for a duplicate name on a VM assigned to the same Cluster and no Tenant. This is necessary
# because Django does not consider two NULL fields to be equal, and thus will not trigger a violation
# of the uniqueness constraint without manual intervention.
if self.tenant is None and VirtualMachine.objects.unrestricted().exclude(pk=self.pk).filter(
if self.tenant is None and VirtualMachine.objects.exclude(pk=self.pk).filter(
name=self.name, tenant__isnull=True
):
raise ValidationError({
+3 -3
View File
@@ -164,7 +164,7 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase):
"""
Check that config context data is included by default in the virtual machines list.
"""
virtualmachine = VirtualMachine.objects.unrestricted().first()
virtualmachine = VirtualMachine.objects.first()
url = '{}?id={}'.format(reverse('virtualization-api:virtualmachine-list'), virtualmachine.pk)
self.add_permissions('virtualization.view_virtualmachine')
@@ -187,7 +187,7 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase):
"""
data = {
'name': 'Virtual Machine 1',
'cluster': Cluster.objects.unrestricted().first().pk,
'cluster': Cluster.objects.first().pk,
}
url = reverse('virtualization-api:virtualmachine-list')
self.add_permissions('virtualization.add_virtualmachine')
@@ -260,7 +260,7 @@ class VMInterfaceTest(APIViewTestCases.APIViewTestCase):
self.add_permissions('virtualization.view_vminterface')
url = reverse('virtualization-api:vminterface-graphs', kwargs={
'pk': VMInterface.objects.unrestricted().first().pk
'pk': VMInterface.objects.first().pk
})
response = self.client.get(url, **self.header)
+21 -21
View File
@@ -8,7 +8,7 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMac
class ClusterTypeTestCase(TestCase):
queryset = ClusterType.objects.unrestricted()
queryset = ClusterType.objects.all()
filterset = ClusterTypeFilterSet
@classmethod
@@ -39,7 +39,7 @@ class ClusterTypeTestCase(TestCase):
class ClusterGroupTestCase(TestCase):
queryset = ClusterGroup.objects.unrestricted()
queryset = ClusterGroup.objects.all()
filterset = ClusterGroupFilterSet
@classmethod
@@ -70,7 +70,7 @@ class ClusterGroupTestCase(TestCase):
class ClusterTestCase(TestCase):
queryset = Cluster.objects.unrestricted()
queryset = Cluster.objects.all()
filterset = ClusterFilterSet
@classmethod
@@ -137,42 +137,42 @@ class ClusterTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self):
regions = Region.objects.unrestricted()[:2]
regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self):
sites = Site.objects.unrestricted()[:2]
sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_group(self):
groups = ClusterGroup.objects.unrestricted()[:2]
groups = ClusterGroup.objects.all()[:2]
params = {'group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'group': [groups[0].slug, groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_type(self):
types = ClusterType.objects.unrestricted()[:2]
types = ClusterType.objects.all()[:2]
params = {'type_id': [types[0].pk, types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'type': [types[0].slug, types[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2]
tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2]
tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@@ -180,7 +180,7 @@ class ClusterTestCase(TestCase):
class VirtualMachineTestCase(TestCase):
queryset = VirtualMachine.objects.unrestricted()
queryset = VirtualMachine.objects.all()
filterset = VirtualMachineFilterSet
@classmethod
@@ -291,21 +291,21 @@ class VirtualMachineTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster_group(self):
groups = ClusterGroup.objects.unrestricted()[:2]
groups = ClusterGroup.objects.all()[:2]
params = {'cluster_group_id': [groups[0].pk, groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'cluster_group': [groups[0].slug, groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster_type(self):
types = ClusterType.objects.unrestricted()[:2]
types = ClusterType.objects.all()[:2]
params = {'cluster_type_id': [types[0].pk, types[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'cluster_type': [types[0].slug, types[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_cluster(self):
clusters = Cluster.objects.unrestricted()[:2]
clusters = Cluster.objects.all()[:2]
params = {'cluster_id': [clusters[0].pk, clusters[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
# TODO: 'cluster' should match on name
@@ -313,28 +313,28 @@ class VirtualMachineTestCase(TestCase):
# self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_region(self):
regions = Region.objects.unrestricted()[:2]
regions = Region.objects.all()[:2]
params = {'region_id': [regions[0].pk, regions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'region': [regions[0].slug, regions[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_site(self):
sites = Site.objects.unrestricted()[:2]
sites = Site.objects.all()[:2]
params = {'site_id': [sites[0].pk, sites[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'site': [sites[0].slug, sites[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_role(self):
roles = DeviceRole.objects.unrestricted()[:2]
roles = DeviceRole.objects.all()[:2]
params = {'role_id': [roles[0].pk, roles[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'role': [roles[0].slug, roles[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_platform(self):
platforms = Platform.objects.unrestricted()[:2]
platforms = Platform.objects.all()[:2]
params = {'platform_id': [platforms[0].pk, platforms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'platform': [platforms[0].slug, platforms[1].slug]}
@@ -351,14 +351,14 @@ class VirtualMachineTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant(self):
tenants = Tenant.objects.unrestricted()[:2]
tenants = Tenant.objects.all()[:2]
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant': [tenants[0].slug, tenants[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_tenant_group(self):
tenant_groups = TenantGroup.objects.unrestricted()[:2]
tenant_groups = TenantGroup.objects.all()[:2]
params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]}
@@ -366,7 +366,7 @@ class VirtualMachineTestCase(TestCase):
class VMInterfaceTestCase(TestCase):
queryset = VMInterface.objects.unrestricted()
queryset = VMInterface.objects.all()
filterset = VMInterfaceFilterSet
@classmethod
@@ -420,7 +420,7 @@ class VMInterfaceTestCase(TestCase):
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_virtual_machine(self):
vms = VirtualMachine.objects.unrestricted()[:2]
vms = VirtualMachine.objects.all()[:2]
params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'virtual_machine': [vms[0].name, vms[1].name]}