@@ -6,7 +6,10 @@ class BaseServiceListFetcher < BaseListFetcher
66 class << self
77 private
88
9- def fetch ( klass , message , omniscient : false , readable_orgs_query : nil , readable_spaces_query : nil , eager_loaded_associations : [ ] )
9+ def fetch ( klass , message , omniscient : false ,
10+ readable_org_ids_query : nil , readable_orgs_query : nil ,
11+ readable_space_ids_query : nil , readable_spaces_query : nil ,
12+ eager_loaded_associations : [ ] )
1013 # The base dataset for the given model; other tables might be joined later on for filtering,
1114 # but we are only interested in the columns from the base table.
1215 dataset = klass . dataset . select_all ( klass . table_name )
@@ -15,10 +18,10 @@ def fetch(klass, message, omniscient: false, readable_orgs_query: nil, readable_
1518 dataset = filter ( message , dataset , klass )
1619
1720 # Filter by permissions granted on org level for plans.
18- plan_dataset = readable_by_plan_org ( dataset , readable_orgs_query )
21+ plan_dataset = readable_by_plan_org ( dataset , readable_org_ids_query )
1922
2023 # Filter by permissions granted on space level for brokers.
21- broker_dataset = readable_by_broker_space ( dataset , readable_spaces_query )
24+ broker_dataset = readable_by_broker_space ( dataset , readable_space_ids_query )
2225
2326 # Apply additional filtering by org / space guids (if requested).
2427 if message . requested? ( :organization_guids )
@@ -27,8 +30,9 @@ def fetch(klass, message, omniscient: false, readable_orgs_query: nil, readable_
2730 plan_dataset ,
2831 broker_dataset ,
2932 omniscient ,
33+ readable_org_ids_query ,
3034 readable_orgs_query ,
31- readable_spaces_query ,
35+ readable_space_ids_query ,
3236 dataset
3337 )
3438 end
@@ -39,7 +43,8 @@ def fetch(klass, message, omniscient: false, readable_orgs_query: nil, readable_
3943 plan_dataset ,
4044 broker_dataset ,
4145 omniscient ,
42- readable_orgs_query ,
46+ readable_org_ids_query ,
47+ readable_space_ids_query ,
4348 readable_spaces_query ,
4449 dataset
4550 )
@@ -66,36 +71,38 @@ def fetch(klass, message, omniscient: false, readable_orgs_query: nil, readable_
6671 dataset . eager ( eager_loaded_associations )
6772 end
6873
69- def readable_by_plan_org ( dataset , readable_orgs_query )
70- return if readable_orgs_query . nil?
74+ def readable_by_plan_org ( dataset , readable_org_ids_query )
75+ return if readable_org_ids_query . nil?
7176
7277 plan_dataset = dataset . clone
7378 plan_dataset = join_plan_org_visibilities ( plan_dataset )
74- plan_dataset . where { Sequel [ :service_plan_visibilities ] [ :organization_id ] =~ readable_orgs_query . select ( :id ) }
79+ plan_dataset . where { Sequel [ :service_plan_visibilities ] [ :organization_id ] =~ readable_org_ids_query }
7580 end
7681
77- def readable_by_broker_space ( dataset , readable_spaces_query )
78- return if readable_spaces_query . nil?
82+ def readable_by_broker_space ( dataset , readable_space_ids_query )
83+ return if readable_space_ids_query . nil?
7984
8085 broker_dataset = dataset . clone
8186 broker_dataset = join_service_brokers ( broker_dataset )
82- broker_dataset . where { Sequel [ :service_brokers ] [ :space_id ] =~ readable_spaces_query . select ( :id ) }
87+ broker_dataset . where { Sequel [ :service_brokers ] [ :space_id ] =~ readable_space_ids_query }
8388 end
8489
85- def filter_by_org_guid ( org_guids , plan_dataset , broker_dataset , omniscient , readable_orgs_query , readable_spaces_query , dataset )
90+ # The readable_orgs_query projects the readable guid set against the user-supplied filter.
91+ # The readable_org_ids_query / readable_space_ids_query gate which sub-datasets are included.
92+ def filter_by_org_guid ( org_guids , plan_dataset , broker_dataset , omniscient , readable_org_ids_query , readable_orgs_query , readable_space_ids_query , dataset )
8693 authorized_org_guids = if !omniscient && !readable_orgs_query . nil?
8794 readable_orgs_query . where ( guid : org_guids ) . select_map ( :guid )
8895 else
8996 org_guids
9097 end
9198
92- if omniscient || !readable_orgs_query . nil?
99+ if omniscient || !readable_org_ids_query . nil?
93100 plan_dataset = dataset . clone if plan_dataset . nil?
94101 plan_dataset = join_plan_orgs ( plan_dataset )
95102 plan_dataset = plan_dataset . where { Sequel [ :plan_orgs ] [ :guid ] =~ authorized_org_guids }
96103 end
97104
98- if omniscient || !readable_spaces_query . nil?
105+ if omniscient || !readable_space_ids_query . nil?
99106 broker_dataset = dataset . clone if broker_dataset . nil?
100107 broker_dataset = join_broker_orgs ( broker_dataset )
101108 broker_dataset = broker_dataset . where { Sequel [ :broker_orgs ] [ :guid ] =~ authorized_org_guids }
@@ -104,20 +111,22 @@ def filter_by_org_guid(org_guids, plan_dataset, broker_dataset, omniscient, read
104111 [ plan_dataset , broker_dataset ]
105112 end
106113
107- def filter_by_space_guid ( space_guids , plan_dataset , broker_dataset , omniscient , readable_orgs_query , readable_spaces_query , dataset )
114+ # The readable_spaces_query projects the readable guid set against the user-supplied filter.
115+ # The readable_org_ids_query / readable_space_ids_query gate which sub-datasets are included.
116+ def filter_by_space_guid ( space_guids , plan_dataset , broker_dataset , omniscient , readable_org_ids_query , readable_space_ids_query , readable_spaces_query , dataset )
108117 authorized_space_guids = if !omniscient && !readable_spaces_query . nil?
109118 readable_spaces_query . where ( guid : space_guids ) . select_map ( :guid )
110119 else
111120 space_guids
112121 end
113122
114- if omniscient || !readable_orgs_query . nil?
123+ if omniscient || !readable_org_ids_query . nil?
115124 plan_dataset = dataset . clone if plan_dataset . nil?
116125 plan_dataset = join_plan_spaces ( plan_dataset )
117126 plan_dataset = plan_dataset . where { Sequel [ :plan_spaces ] [ :guid ] =~ authorized_space_guids }
118127 end
119128
120- if omniscient || !readable_spaces_query . nil?
129+ if omniscient || !readable_space_ids_query . nil?
121130 broker_dataset = dataset . clone if broker_dataset . nil?
122131 broker_dataset = join_broker_spaces ( broker_dataset )
123132 broker_dataset = broker_dataset . where { Sequel [ :broker_spaces ] [ :guid ] =~ authorized_space_guids }
0 commit comments