Пример #1
0
    def run(self) -> Model:
        self.validate()
        try:
            dataset = DatasetDAO.delete(self._model, commit=False)

            view_menu = (security_manager.find_view_menu(
                self._model.get_perm()) if self._model else None)

            if view_menu:
                permission_views = (db.session.query(
                    security_manager.permissionview_model).filter_by(
                        view_menu=view_menu).all())

                for permission_view in permission_views:
                    db.session.delete(permission_view)
                if view_menu:
                    db.session.delete(view_menu)
            else:
                if not view_menu:
                    logger.error(
                        "Could not find the data access permission for the dataset"
                    )
            db.session.commit()
        except (SQLAlchemyError, DAODeleteFailedError) as ex:
            logger.exception(ex)
            db.session.rollback()
            raise DatasetDeleteFailedError()
        return dataset
Пример #2
0
def test_migrate_role(descriptiom, new_pvms, pvm_map, external_pvms,
                      deleted_views, deleted_permissions):
    """
    Permission migration: generic tests
    """
    logger.info(descriptiom)
    with create_old_role(pvm_map, external_pvms) as old_role:
        role_name = old_role.name
        session = db.session

        # Run migrations
        add_pvms(session, new_pvms)
        migrate_roles(session, pvm_map)

        role = db.session.query(Role).filter(
            Role.name == role_name).one_or_none()
        for old_pvm, new_pvms in pvm_map.items():
            old_pvm_model = security_manager.find_permission_view_menu(
                old_pvm.permission, old_pvm.view)
            assert old_pvm_model is None
            new_pvm_model = security_manager.find_permission_view_menu(
                new_pvms[0].permission, new_pvms[0].view)
            assert new_pvm_model is not None
            assert new_pvm_model in role.permissions
        # assert deleted view menus
        for deleted_view in deleted_views:
            assert security_manager.find_view_menu(deleted_view) is None
        # assert deleted permissions
        for deleted_permission in deleted_permissions:
            assert security_manager.find_permission(deleted_permission) is None
        # assert externals are still there
        for external_pvm in external_pvms:
            assert (security_manager.find_permission_view_menu(
                external_pvm.permission, external_pvm.view) is not None)
    def run(self) -> None:
        self.validate()
        if not self._models:
            return None
        try:
            DatasetDAO.bulk_delete(self._models)
            for model in self._models:
                view_menu = (security_manager.find_view_menu(model.get_perm())
                             if model else None)

                if view_menu:
                    permission_views = (db.session.query(
                        security_manager.permissionview_model).filter_by(
                            view_menu=view_menu).all())

                    for permission_view in permission_views:
                        db.session.delete(permission_view)
                    if view_menu:
                        db.session.delete(view_menu)
                else:
                    if not view_menu:
                        logger.error(
                            "Could not find the data access permission for the dataset",
                            exc_info=True,
                        )
            db.session.commit()

            return None
        except DeleteFailedError as ex:
            logger.exception(ex.exception)
            raise DatasetBulkDeleteFailedError()
Пример #4
0
    def test_bulk_delete_dataset_items(self):
        """
        Dataset API: Test bulk delete dataset items
        """
        datasets = self.get_fixture_datasets()
        dataset_ids = [dataset.id for dataset in datasets]

        view_menu_names = []
        for dataset in datasets:
            view_menu_names.append(dataset.get_perm())

        self.login(username="******")
        uri = f"api/v1/dataset/?q={prison.dumps(dataset_ids)}"
        rv = self.delete_assert_metric(uri, "bulk_delete")
        data = json.loads(rv.data.decode("utf-8"))
        assert rv.status_code == 200
        expected_response = {"message": f"Deleted {len(datasets)} datasets"}
        assert data == expected_response
        datasets = (
            db.session.query(SqlaTable)
            .filter(SqlaTable.table_name.in_(self.fixture_tables_names))
            .all()
        )
        assert datasets == []
        # Assert permissions get cleaned
        for view_menu_name in view_menu_names:
            assert security_manager.find_view_menu(view_menu_name) is None
Пример #5
0
 def test_delete_dataset_item(self):
     """
     Dataset API: Test delete dataset item
     """
     dataset = self.insert_default_dataset()
     view_menu = security_manager.find_view_menu(dataset.get_perm())
     assert view_menu is not None
     view_menu_id = view_menu.id
     self.login(username="******")
     uri = f"api/v1/dataset/{dataset.id}"
     rv = self.client.delete(uri)
     assert rv.status_code == 200
     non_view_menu = db.session.query(
         security_manager.viewmenu_model).get(view_menu_id)
     assert non_view_menu is None