Skip to content

Commit 4a6701a

Browse files
authored
Upstream 16527 - Eliminate LEFT OUTER JOINs in unified job RBAC query (#586)
* Upstream 16527 - Eliminate LEFT OUTER JOINs in unified job RBAC query * Optimize some subqueries styling (This won't do much for performance though)
1 parent 336db7b commit 4a6701a

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

awx/main/access.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2380,8 +2380,8 @@ class JobEventAccess(BaseAccess):
23802380

23812381
def filtered_queryset(self):
23822382
return self.model.objects.filter(
2383-
Q(host__inventory__in=Inventory.accessible_pk_qs(self.user, 'read_role'))
2384-
| Q(job__job_template__in=JobTemplate.accessible_pk_qs(self.user, 'read_role'))
2383+
Q(host_id__in=Host.objects.filter(inventory__in=Inventory.accessible_pk_qs(self.user, 'read_role')).values('pk'))
2384+
| Q(job_id__in=Job.objects.filter(job_template__in=JobTemplate.accessible_pk_qs(self.user, 'read_role')).values('pk'))
23852385
)
23862386

23872387
def can_add(self, data):
@@ -2511,7 +2511,11 @@ class UnifiedJobTemplateAccess(BaseAccess):
25112511
def filtered_queryset(self):
25122512
return self.model.objects.filter(
25132513
Q(pk__in=self.model.accessible_pk_qs(self.user, 'read_role'))
2514-
| Q(inventorysource__inventory__id__in=Inventory._accessible_pk_qs(Inventory, self.user, 'read_role'))
2514+
| Q(
2515+
pk__in=InventorySource.objects.filter(
2516+
inventory_id__in=Inventory._accessible_pk_qs(Inventory, self.user, 'read_role'),
2517+
).values('unifiedjobtemplate_ptr_id')
2518+
)
25152519
)
25162520

25172521
def can_start(self, obj, validate_license=True):
@@ -2561,8 +2565,8 @@ def filtered_queryset(self):
25612565
org_auditor_qs = Organization.objects.filter(Q(admin_role__members=self.user) | Q(auditor_role__members=self.user))
25622566
qs = self.model.objects.filter(
25632567
Q(unified_job_template_id__in=UnifiedJobTemplate.accessible_pk_qs(self.user, 'read_role'))
2564-
| Q(inventoryupdate__inventory_source__inventory__id__in=inv_pk_qs)
2565-
| Q(adhoccommand__inventory__id__in=inv_pk_qs)
2568+
| Q(pk__in=InventoryUpdate.objects.filter(inventory_source__inventory_id__in=inv_pk_qs).values('pk'))
2569+
| Q(pk__in=AdHocCommand.objects.filter(inventory_id__in=inv_pk_qs).values('pk'))
25662570
| Q(organization__in=org_auditor_qs)
25672571
)
25682572
return qs
@@ -2685,8 +2689,12 @@ class LabelAccess(BaseAccess):
26852689
def filtered_queryset(self):
26862690
return self.model.objects.filter(
26872691
Q(organization__in=Organization.accessible_pk_qs(self.user, 'read_role'))
2688-
| Q(unifiedjobtemplate_labels__in=UnifiedJobTemplate.accessible_pk_qs(self.user, 'read_role'))
2689-
).distinct()
2692+
| Q(
2693+
pk__in=UnifiedJobTemplate.labels.through.objects.filter(
2694+
unifiedjobtemplate_id__in=UnifiedJobTemplate.accessible_pk_qs(self.user, 'read_role'),
2695+
).values('label_id')
2696+
)
2697+
)
26902698

26912699
@check_superuser
26922700
def can_add(self, data):

0 commit comments

Comments
 (0)