Skip to content

Commit 16295b0

Browse files
marreMarkus Eriksson
authored andcommitted
fix: Add user filtering to changed_by. Fixes #27986 (#29287)
Co-authored-by: Markus Eriksson <[email protected]> (cherry picked from commit 922128f)
1 parent afe580b commit 16295b0

File tree

9 files changed

+49
-3
lines changed

9 files changed

+49
-3
lines changed

superset/charts/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,10 +269,12 @@ def ensure_thumbnails_enabled(self) -> Optional[Response]:
269269
base_related_field_filters = {
270270
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
271271
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
272+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
272273
}
273274
related_field_filters = {
274275
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
275276
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
277+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
276278
}
277279

278280
allowed_rel_fields = {"owners", "created_by", "changed_by"}

superset/css_templates/api.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@
3535
)
3636
from superset.extensions import event_logger
3737
from superset.models.core import CssTemplate
38-
from superset.views.base_api import BaseSupersetModelRestApi, statsd_metrics
38+
from superset.views.base_api import (
39+
BaseSupersetModelRestApi,
40+
RelatedFieldFilter,
41+
statsd_metrics,
42+
)
43+
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
3944

4045
logger = logging.getLogger(__name__)
4146

@@ -91,6 +96,13 @@ class CssTemplateRestApi(BaseSupersetModelRestApi):
9196
openapi_spec_tag = "CSS Templates"
9297
openapi_spec_methods = openapi_spec_methods_override
9398

99+
related_field_filters = {
100+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
101+
}
102+
base_related_field_filters = {
103+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
104+
}
105+
94106
@expose("/", methods=("DELETE",))
95107
@protect()
96108
@safe

superset/dashboards/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,13 +276,15 @@ def ensure_thumbnails_enabled(self) -> Optional[Response]:
276276
base_related_field_filters = {
277277
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
278278
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
279+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
279280
"roles": [["id", BaseFilterRelatedRoles, lambda: []]],
280281
}
281282

282283
related_field_filters = {
283284
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
284285
"roles": RelatedFieldFilter("name", FilterRelatedRoles),
285286
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
287+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
286288
}
287289
allowed_rel_fields = {"owners", "roles", "created_by", "changed_by"}
288290

superset/databases/api.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,13 @@
125125
from superset.utils.ssh_tunnel import mask_password_info
126126
from superset.views.base_api import (
127127
BaseSupersetModelRestApi,
128+
RelatedFieldFilter,
128129
requires_form_data,
129130
requires_json,
130131
statsd_metrics,
131132
)
132133
from superset.views.error_handling import json_error_response
134+
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
133135

134136
logger = logging.getLogger(__name__)
135137

@@ -304,6 +306,13 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
304306
openapi_spec_methods = openapi_spec_methods_override
305307
""" Overrides GET methods OpenApi descriptions """
306308

309+
related_field_filters = {
310+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
311+
}
312+
base_related_field_filters = {
313+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
314+
}
315+
307316
@expose("/<int:pk>/connection", methods=("GET",))
308317
@protect()
309318
@safe

superset/datasets/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,12 @@ class DatasetRestApi(BaseSupersetModelRestApi):
242242

243243
base_related_field_filters = {
244244
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
245+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
245246
"database": [["id", DatabaseFilter, lambda: []]],
246247
}
247248
related_field_filters = {
248249
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
250+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
249251
"database": "database_name",
250252
}
251253
search_filters = {

superset/queries/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,13 @@ class QueryRestApi(BaseSupersetModelRestApi):
144144
]
145145
base_related_field_filters = {
146146
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
147+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
147148
"user": [["id", BaseFilterRelatedUsers, lambda: []]],
148149
"database": [["id", DatabaseFilter, lambda: []]],
149150
}
150151
related_field_filters = {
151152
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
153+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
152154
"user": RelatedFieldFilter("first_name", FilterRelatedOwners),
153155
}
154156

superset/queries/saved_queries/api.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@
5656
from superset.utils import json
5757
from superset.views.base_api import (
5858
BaseSupersetModelRestApi,
59+
RelatedFieldFilter,
5960
requires_form_data,
6061
statsd_metrics,
6162
)
63+
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
6264

6365
logger = logging.getLogger(__name__)
6466

@@ -179,8 +181,12 @@ class SavedQueryRestApi(BaseSupersetModelRestApi):
179181

180182
related_field_filters = {
181183
"database": "database_name",
184+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
185+
}
186+
base_related_field_filters = {
187+
"database": [["id", DatabaseFilter, lambda: []]],
188+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
182189
}
183-
base_related_field_filters = {"database": [["id", DatabaseFilter, lambda: []]]}
184190
allowed_rel_fields = {"database", "changed_by", "created_by"}
185191
allowed_distinct_fields = {"catalog", "schema"}
186192

superset/reports/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ def ensure_alert_reports_enabled(self) -> Optional[Response]:
228228
"database": [["id", DatabaseFilter, lambda: []]],
229229
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
230230
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
231+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
231232
}
232233
text_field_rel_fields = {
233234
"dashboard": "dashboard_title",
@@ -239,6 +240,7 @@ def ensure_alert_reports_enabled(self) -> Optional[Response]:
239240
"chart": "slice_name",
240241
"database": "database_name",
241242
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
243+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
242244
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
243245
}
244246

superset/row_level_security/api.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,15 @@
4747
from superset.views.base import DatasourceFilter
4848
from superset.views.base_api import (
4949
BaseSupersetModelRestApi,
50+
RelatedFieldFilter,
5051
requires_json,
5152
statsd_metrics,
5253
)
53-
from superset.views.filters import BaseFilterRelatedRoles
54+
from superset.views.filters import (
55+
BaseFilterRelatedRoles,
56+
BaseFilterRelatedUsers,
57+
FilterRelatedOwners,
58+
)
5459

5560
logger = logging.getLogger(__name__)
5661

@@ -129,9 +134,13 @@ class RLSRestApi(BaseSupersetModelRestApi):
129134
edit_model_schema = RLSPutSchema()
130135

131136
allowed_rel_fields = {"tables", "roles", "created_by", "changed_by"}
137+
related_field_filters = {
138+
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
139+
}
132140
base_related_field_filters = {
133141
"tables": [["id", DatasourceFilter, lambda: []]],
134142
"roles": [["id", BaseFilterRelatedRoles, lambda: []]],
143+
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
135144
}
136145

137146
openapi_spec_methods = openapi_spec_methods_override

0 commit comments

Comments
 (0)