diff --git a/superset/models/core.py b/superset/models/core.py index b848604a46..0486245a9f 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -748,6 +748,10 @@ class Database(Model, AuditMixinNullable, ImportMixin): def table_cache_timeout(self): return self.metadata_cache_timeout.get('table_cache_timeout') + @property + def default_schemas(self): + return self.get_extra().get('default_schemas', []) + @classmethod def get_password_masked_url_from_uri(cls, uri): url = make_url(uri) diff --git a/superset/views/core.py b/superset/views/core.py index becc1b1384..d8953d75a4 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -1513,6 +1513,16 @@ class Superset(BaseSupersetView): table_names = [tn for tn in table_names if substr in tn] view_names = [vn for vn in view_names if substr in vn] + if not schema and database.default_schemas: + def get_schema(tbl_or_view_name): + return tbl_or_view_name.split('.')[0] if '.' in tbl_or_view_name else None + + user_schema = g.user.email.split('@')[0] + valid_schemas = set(database.default_schemas + [user_schema]) + + table_names = [tn for tn in table_names if get_schema(tn) in valid_schemas] + view_names = [vn for vn in view_names if get_schema(vn) in valid_schemas] + max_items = config.get('MAX_TABLE_NAMES') or len(table_names) total_items = len(table_names) + len(view_names) max_tables = len(table_names)