diff --git a/superset-frontend/src/pages/SavedQueryList/index.tsx b/superset-frontend/src/pages/SavedQueryList/index.tsx index 1010585eb37d..9c44bdbe99e3 100644 --- a/superset-frontend/src/pages/SavedQueryList/index.tsx +++ b/superset-frontend/src/pages/SavedQueryList/index.tsx @@ -441,6 +441,22 @@ function SavedQueryList({ size: 'xl', id: 'changed_on_delta_humanized', }, + { + accessor: 'created_by.first_name', + Header: t('Created by'), + disableSortBy: true, + size: 'xl', + Cell: ({ + row: { + original: { created_by: createdBy }, + }, + }: any) => + createdBy ? `${createdBy.first_name} ${createdBy.last_name}` : '', + }, + { + accessor: 'created_by', + hidden: true, + }, { Cell: ({ row: { original } }: any) => { const handlePreview = () => { @@ -589,6 +605,26 @@ function SavedQueryList({ ), paginate: true, }, + { + Header: t('Created by'), + key: 'created_by', + id: 'created_by', + input: 'select', + operator: FilterOperator.RelationOneMany, + unfilteredLabel: t('All'), + fetchSelects: createFetchRelated( + 'saved_query', + 'created_by', + createErrorHandler(errMsg => + t( + 'An error occurred while fetching created_by values: %s', + errMsg, + ), + ), + user, + ), + paginate: true, + }, ], [addDangerToast], ); diff --git a/superset/queries/saved_queries/api.py b/superset/queries/saved_queries/api.py index d625b906ad83..e47cc61060c5 100644 --- a/superset/queries/saved_queries/api.py +++ b/superset/queries/saved_queries/api.py @@ -183,10 +183,12 @@ class SavedQueryRestApi(BaseSupersetModelRestApi): related_field_filters = { "database": "database_name", "changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners), + "created_by": RelatedFieldFilter("first_name", FilterRelatedOwners), } base_related_field_filters = { "database": [["id", DatabaseFilter, lambda: []]], "changed_by": [["id", BaseFilterRelatedUsers, lambda: []]], + "created_by": [["id", BaseFilterRelatedUsers, lambda: []]], } allowed_rel_fields = {"database", "changed_by", "created_by"} allowed_distinct_fields = {"catalog", "schema"} diff --git a/superset/queries/saved_queries/filters.py b/superset/queries/saved_queries/filters.py index 821f42d6f112..00a21578b1a3 100644 --- a/superset/queries/saved_queries/filters.py +++ b/superset/queries/saved_queries/filters.py @@ -22,6 +22,7 @@ from sqlalchemy import or_ from sqlalchemy.orm.query import Query +from superset import security_manager from superset.models.sql_lab import SavedQuery from superset.tags.filters import BaseTagIdFilter, BaseTagNameFilter from superset.views.base import BaseFilter @@ -86,6 +87,8 @@ def apply(self, query: BaseQuery, value: Any) -> BaseQuery: :returns: flask-sqlalchemy query """ - return query.filter( - SavedQuery.created_by == g.user # pylint: disable=comparison-with-callable - ) + if not security_manager.can_access_all_queries(): + query = query.filter( + SavedQuery.created_by == g.user # pylint: disable=comparison-with-callable + ) + return query