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):
         """