You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by dp...@apache.org on 2020/08/13 09:18:41 UTC
[incubator-superset] branch master updated: fix: dataset delete and
perm delete (#10578)
This is an automated email from the ASF dual-hosted git repository.
dpgaspar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 11da6ee fix: dataset delete and perm delete (#10578)
11da6ee is described below
commit 11da6ee8123e525d080904c8361d6fb8fd9e685a
Author: Daniel Vaz Gaspar <da...@gmail.com>
AuthorDate: Thu Aug 13 10:18:13 2020 +0100
fix: dataset delete and perm delete (#10578)
---
superset/datasets/commands/delete.py | 23 ++++++++++++++++++++---
superset/tasks/slack_util.py | 2 +-
tests/datasets/api_tests.py | 7 +++++++
3 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/superset/datasets/commands/delete.py b/superset/datasets/commands/delete.py
index 551d222..236fadd 100644
--- a/superset/datasets/commands/delete.py
+++ b/superset/datasets/commands/delete.py
@@ -46,10 +46,27 @@ class DeleteDatasetCommand(BaseCommand):
def run(self) -> Model:
self.validate()
try:
- dataset = DatasetDAO.delete(self._model, commit=False)
- security_manager.del_permission_view_menu(
- "datasource_access", dataset.get_perm()
+ view_menu = (
+ security_manager.find_view_menu(self._model.get_perm())
+ if self._model
+ else None
+ )
+ if not view_menu:
+ logger.error(
+ "Could not find the data access permission for the dataset"
+ )
+ raise DatasetDeleteFailedError()
+ permission_views = (
+ db.session.query(security_manager.permissionview_model)
+ .filter_by(view_menu=view_menu)
+ .all()
)
+ dataset = DatasetDAO.delete(self._model, commit=False)
+
+ for permission_view in permission_views:
+ db.session.delete(permission_view)
+ if view_menu:
+ db.session.delete(view_menu)
db.session.commit()
except (SQLAlchemyError, DAODeleteFailedError) as ex:
logger.exception(ex)
diff --git a/superset/tasks/slack_util.py b/superset/tasks/slack_util.py
index 64e9923..865aa59 100644
--- a/superset/tasks/slack_util.py
+++ b/superset/tasks/slack_util.py
@@ -26,7 +26,7 @@ from slack.web.slack_response import SlackResponse
from superset import app
# Globals
-config = app.config
+config = app.config # type: ignore
logger = logging.getLogger("tasks.slack_util")
diff --git a/tests/datasets/api_tests.py b/tests/datasets/api_tests.py
index 68571c6..a7795f9 100644
--- a/tests/datasets/api_tests.py
+++ b/tests/datasets/api_tests.py
@@ -615,10 +615,17 @@ class TestDatasetApi(SupersetTestCase):
Dataset API: Test delete dataset item
"""
dataset = self.insert_default_dataset()
+ view_menu = security_manager.find_view_menu(dataset.get_perm())
+ self.assertIsNotNone(view_menu)
+ view_menu_id = view_menu.id
self.login(username="admin")
uri = f"api/v1/dataset/{dataset.id}"
rv = self.client.delete(uri)
self.assertEqual(rv.status_code, 200)
+ non_view_menu = db.session.query(security_manager.viewmenu_model).get(
+ view_menu_id
+ )
+ self.assertIsNone(non_view_menu)
def test_delete_item_dataset_not_owned(self):
"""