This is an automated email from the ASF dual-hosted git repository.

villebro pushed a commit to branch 0.37
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git

commit 003161ebe57ad03aab454c8a115a514c7068d34b
Author: Daniel Vaz Gaspar <danielvazgas...@gmail.com>
AuthorDate: Thu Aug 13 10:18:13 2020 +0100

    fix: dataset delete and perm delete (#10578)
---
 superset/datasets/commands/delete.py | 23 ++++++++++++++++++++---
 tests/datasets/api_tests.py          |  7 +++++++
 2 files changed, 27 insertions(+), 3 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/tests/datasets/api_tests.py b/tests/datasets/api_tests.py
index bd634ea..d230b2b 100644
--- a/tests/datasets/api_tests.py
+++ b/tests/datasets/api_tests.py
@@ -602,10 +602,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):
         """

Reply via email to