From ece8d8ffca5b67bf39b3c52881ab5fa66828f631 Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Mon, 29 Jun 2026 15:08:29 -0700 Subject: [PATCH] fix(datasource): allow Gamma to load combined datasource list (#41553) --- superset/datasource/api.py | 3 ++ .../integration_tests/datasource/api_tests.py | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/superset/datasource/api.py b/superset/datasource/api.py index 69ad1e34181..f04db51e886 100644 --- a/superset/datasource/api.py +++ b/superset/datasource/api.py @@ -45,6 +45,9 @@ logger = logging.getLogger(__name__) class DatasourceRestApi(BaseSupersetApi): allow_browser_login = True class_permission_name = "Datasource" + method_permission_name = { + "combined_list": "read", + } resource_name = "datasource" openapi_spec_tag = "Datasources" diff --git a/tests/integration_tests/datasource/api_tests.py b/tests/integration_tests/datasource/api_tests.py index c767cbfaca2..335f09ea47f 100644 --- a/tests/integration_tests/datasource/api_tests.py +++ b/tests/integration_tests/datasource/api_tests.py @@ -339,12 +339,6 @@ class TestDatasourceApi(SupersetTestCase): run_mock, can_access_mock, ): - security_manager.add_permission_view_menu("can_combined_list", "Datasource") - perm = security_manager.find_permission_view_menu( - "can_combined_list", "Datasource" - ) - admin_role = security_manager.find_role("Admin") - security_manager.add_permission_role(admin_role, perm) can_access_mock.side_effect = [True, True] run_mock.side_effect = ValueError("Invalid order column: invalid") self.login(ADMIN_USERNAME) @@ -364,12 +358,6 @@ class TestDatasourceApi(SupersetTestCase): run_mock, can_access_mock, ): - security_manager.add_permission_view_menu("can_combined_list", "Datasource") - perm = security_manager.find_permission_view_menu( - "can_combined_list", "Datasource" - ) - admin_role = security_manager.find_role("Admin") - security_manager.add_permission_role(admin_role, perm) can_access_mock.return_value = True run_mock.return_value = {"count": 1, "result": []} self.login(ADMIN_USERNAME) @@ -383,3 +371,19 @@ class TestDatasourceApi(SupersetTestCase): run_mock.assert_called_once() _, kwargs = run_mock.call_args assert kwargs == {} + + @patch("superset.datasource.api.GetCombinedDatasourceListCommand.run") + def test_combined_list_gamma_uses_read_permission(self, run_mock): + run_mock.return_value = {"count": 0, "result": []} + self.login(GAMMA_USERNAME) + + rv = self.client.get( + "api/v1/datasource/?q=" + "(order_column:changed_on_delta_humanized," + "order_direction:desc,page:0,page_size:25)" + ) + + assert rv.status_code == 200 + response = json.loads(rv.data.decode("utf-8")) + assert response == {"count": 0, "result": []} + run_mock.assert_called_once()