fix: dataset delete and perm delete (#10578)

This commit is contained in:
Daniel Vaz Gaspar
2020-08-13 10:18:13 +01:00
committed by GitHub
parent bd88e12b8b
commit 11da6ee812
3 changed files with 28 additions and 4 deletions

View File

@@ -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)

View File

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

View File

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