mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
fix: Allow dataset owners to explore their datasets (#20382)
* fix: Allow dataset owners to explore their datasets * Re-order imports * Give owners security manager permissions to their datasets * Update test suite * Add SqlaTable to is_owner types * Add owners to datasource mock * Fix VSCode import error * Fix merge error
This commit is contained in:
@@ -21,7 +21,7 @@ import imp
|
||||
import json
|
||||
from contextlib import contextmanager
|
||||
from typing import Any, Dict, Union, List, Optional
|
||||
from unittest.mock import Mock, patch
|
||||
from unittest.mock import Mock, patch, MagicMock
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
@@ -252,7 +252,7 @@ class SupersetTestCase(TestCase):
|
||||
|
||||
@staticmethod
|
||||
def get_datasource_mock() -> BaseDatasource:
|
||||
datasource = Mock()
|
||||
datasource = MagicMock()
|
||||
results = Mock()
|
||||
results.query = Mock()
|
||||
results.status = Mock()
|
||||
@@ -266,6 +266,7 @@ class SupersetTestCase(TestCase):
|
||||
datasource.database = Mock()
|
||||
datasource.database.db_engine_spec = Mock()
|
||||
datasource.database.db_engine_spec.mutate_expression_label = lambda x: x
|
||||
datasource.owners = MagicMock()
|
||||
return datasource
|
||||
|
||||
def get_resp(
|
||||
|
||||
@@ -906,7 +906,10 @@ class TestSecurityManager(SupersetTestCase):
|
||||
|
||||
@patch("superset.security.SupersetSecurityManager.can_access")
|
||||
@patch("superset.security.SupersetSecurityManager.can_access_schema")
|
||||
def test_raise_for_access_datasource(self, mock_can_access_schema, mock_can_access):
|
||||
@patch("superset.views.utils.is_owner")
|
||||
def test_raise_for_access_datasource(
|
||||
self, mock_can_access_schema, mock_can_access, mock_is_owner
|
||||
):
|
||||
datasource = self.get_datasource_mock()
|
||||
|
||||
mock_can_access_schema.return_value = True
|
||||
@@ -914,12 +917,14 @@ class TestSecurityManager(SupersetTestCase):
|
||||
|
||||
mock_can_access.return_value = False
|
||||
mock_can_access_schema.return_value = False
|
||||
mock_is_owner.return_value = False
|
||||
|
||||
with self.assertRaises(SupersetSecurityException):
|
||||
security_manager.raise_for_access(datasource=datasource)
|
||||
|
||||
@patch("superset.security.SupersetSecurityManager.can_access")
|
||||
def test_raise_for_access_query(self, mock_can_access):
|
||||
@patch("superset.views.utils.is_owner")
|
||||
def test_raise_for_access_query(self, mock_can_access, mock_is_owner):
|
||||
query = Mock(
|
||||
database=get_example_database(), schema="bar", sql="SELECT * FROM foo"
|
||||
)
|
||||
@@ -928,6 +933,7 @@ class TestSecurityManager(SupersetTestCase):
|
||||
security_manager.raise_for_access(query=query)
|
||||
|
||||
mock_can_access.return_value = False
|
||||
mock_is_owner.return_value = False
|
||||
|
||||
with self.assertRaises(SupersetSecurityException):
|
||||
security_manager.raise_for_access(query=query)
|
||||
|
||||
@@ -271,7 +271,7 @@ def test_query_has_access(mocker: MockFixture, app_context: AppContext) -> None:
|
||||
)
|
||||
|
||||
|
||||
def test_query_no_access(mocker: MockFixture, app_context: AppContext) -> None:
|
||||
def test_query_no_access(mocker: MockFixture, client, app_context: AppContext) -> None:
|
||||
from superset.connectors.sqla.models import SqlaTable
|
||||
from superset.explore.utils import check_datasource_access
|
||||
from superset.models.core import Database
|
||||
@@ -282,7 +282,9 @@ def test_query_no_access(mocker: MockFixture, app_context: AppContext) -> None:
|
||||
query_find_by_id,
|
||||
return_value=Query(database=Database(), sql="select * from foo"),
|
||||
)
|
||||
mocker.patch(query_datasources_by_name, return_value=[SqlaTable()])
|
||||
table = SqlaTable()
|
||||
table.owners = []
|
||||
mocker.patch(query_datasources_by_name, return_value=[table])
|
||||
mocker.patch(is_user_admin, return_value=False)
|
||||
mocker.patch(is_owner, return_value=False)
|
||||
mocker.patch(can_access, return_value=False)
|
||||
|
||||
Reference in New Issue
Block a user