fix: Add user filtering to changed_by. Fixes #27986 (#29287)

Co-authored-by: Markus Eriksson <markus.eriksson@sinch.com>
This commit is contained in:
Markus Eriksson 2024-07-25 23:23:00 +02:00 committed by GitHub
parent 3de2b7c989
commit 922128f6e0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 49 additions and 3 deletions

View File

@ -269,10 +269,12 @@ class ChartRestApi(BaseSupersetModelRestApi):
base_related_field_filters = {
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
}
related_field_filters = {
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
allowed_rel_fields = {"owners", "created_by", "changed_by"}

View File

@ -35,7 +35,12 @@ from superset.css_templates.schemas import (
)
from superset.extensions import event_logger
from superset.models.core import CssTemplate
from superset.views.base_api import BaseSupersetModelRestApi, statsd_metrics
from superset.views.base_api import (
BaseSupersetModelRestApi,
RelatedFieldFilter,
statsd_metrics,
)
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
logger = logging.getLogger(__name__)
@ -91,6 +96,13 @@ class CssTemplateRestApi(BaseSupersetModelRestApi):
openapi_spec_tag = "CSS Templates"
openapi_spec_methods = openapi_spec_methods_override
related_field_filters = {
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
base_related_field_filters = {
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
}
@expose("/", methods=("DELETE",))
@protect()
@safe

View File

@ -271,6 +271,7 @@ class DashboardRestApi(BaseSupersetModelRestApi):
base_related_field_filters = {
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"roles": [["id", BaseFilterRelatedRoles, lambda: []]],
}
@ -278,6 +279,7 @@ class DashboardRestApi(BaseSupersetModelRestApi):
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
"roles": RelatedFieldFilter("name", FilterRelatedRoles),
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
allowed_rel_fields = {"owners", "roles", "created_by", "changed_by"}

View File

@ -125,11 +125,13 @@ from superset.utils.oauth2 import decode_oauth2_state
from superset.utils.ssh_tunnel import mask_password_info
from superset.views.base_api import (
BaseSupersetModelRestApi,
RelatedFieldFilter,
requires_form_data,
requires_json,
statsd_metrics,
)
from superset.views.error_handling import json_error_response
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
logger = logging.getLogger(__name__)
@ -304,6 +306,13 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
openapi_spec_methods = openapi_spec_methods_override
""" Overrides GET methods OpenApi descriptions """
related_field_filters = {
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
base_related_field_filters = {
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
}
@expose("/<int:pk>/connection", methods=("GET",))
@protect()
@safe

View File

@ -242,10 +242,12 @@ class DatasetRestApi(BaseSupersetModelRestApi):
base_related_field_filters = {
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"database": [["id", DatabaseFilter, lambda: []]],
}
related_field_filters = {
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"database": "database_name",
}
search_filters = {

View File

@ -144,11 +144,13 @@ class QueryRestApi(BaseSupersetModelRestApi):
]
base_related_field_filters = {
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"user": [["id", BaseFilterRelatedUsers, lambda: []]],
"database": [["id", DatabaseFilter, lambda: []]],
}
related_field_filters = {
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"user": RelatedFieldFilter("first_name", FilterRelatedOwners),
}

View File

@ -56,9 +56,11 @@ from superset.queries.saved_queries.schemas import (
from superset.utils import json
from superset.views.base_api import (
BaseSupersetModelRestApi,
RelatedFieldFilter,
requires_form_data,
statsd_metrics,
)
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
logger = logging.getLogger(__name__)
@ -179,8 +181,12 @@ class SavedQueryRestApi(BaseSupersetModelRestApi):
related_field_filters = {
"database": "database_name",
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
base_related_field_filters = {
"database": [["id", DatabaseFilter, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
}
base_related_field_filters = {"database": [["id", DatabaseFilter, lambda: []]]}
allowed_rel_fields = {"database", "changed_by", "created_by"}
allowed_distinct_fields = {"catalog", "schema"}

View File

@ -228,6 +228,7 @@ class ReportScheduleRestApi(BaseSupersetModelRestApi):
"database": [["id", DatabaseFilter, lambda: []]],
"owners": [["id", BaseFilterRelatedUsers, lambda: []]],
"created_by": [["id", BaseFilterRelatedUsers, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
}
text_field_rel_fields = {
"dashboard": "dashboard_title",
@ -239,6 +240,7 @@ class ReportScheduleRestApi(BaseSupersetModelRestApi):
"chart": "slice_name",
"database": "database_name",
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
"owners": RelatedFieldFilter("first_name", FilterRelatedOwners),
}

View File

@ -47,10 +47,15 @@ from superset.row_level_security.schemas import (
from superset.views.base import DatasourceFilter
from superset.views.base_api import (
BaseSupersetModelRestApi,
RelatedFieldFilter,
requires_json,
statsd_metrics,
)
from superset.views.filters import BaseFilterRelatedRoles
from superset.views.filters import (
BaseFilterRelatedRoles,
BaseFilterRelatedUsers,
FilterRelatedOwners,
)
logger = logging.getLogger(__name__)
@ -129,9 +134,13 @@ class RLSRestApi(BaseSupersetModelRestApi):
edit_model_schema = RLSPutSchema()
allowed_rel_fields = {"tables", "roles", "created_by", "changed_by"}
related_field_filters = {
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
base_related_field_filters = {
"tables": [["id", DatasourceFilter, lambda: []]],
"roles": [["id", BaseFilterRelatedRoles, lambda: []]],
"changed_by": [["id", BaseFilterRelatedUsers, lambda: []]],
}
openapi_spec_methods = openapi_spec_methods_override