From e1a918f14112b257a470a0478fe77d2be3d795df Mon Sep 17 00:00:00 2001 From: Phillip Kelley-Dotson Date: Fri, 8 Jul 2022 11:22:45 -0700 Subject: [PATCH] fix: enable admin to edit dataset in explore (#20613) * add conditional * add test * fix lint --- .../DatasourceControl.test.tsx | 21 +++++++++++++++++++ .../controls/DatasourceControl/index.jsx | 7 +++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx b/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx index 46ecbeae58b9..9b4801523918 100644 --- a/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx +++ b/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx @@ -139,6 +139,27 @@ test('Click on Edit dataset', async () => { ).toBeInTheDocument(); }); +test('Edit dataset should be disabled when user is not admin', async () => { + const props = createProps(); + // @ts-expect-error + props.user.roles = {}; + props.datasource.owners = []; + SupersetClientGet.mockImplementation( + async () => ({ json: { result: [] } } as any), + ); + + render(, { + useRedux: true, + }); + + userEvent.click(screen.getByTestId('datasource-menu-trigger')); + + expect(screen.getByTestId('edit-dataset')).toHaveAttribute( + 'aria-disabled', + 'true', + ); +}); + test('Click on View in SQL Lab', async () => { const props = createProps(); const postFormSpy = jest.spyOn(SupersetClient, 'postForm'); diff --git a/superset-frontend/src/explore/components/controls/DatasourceControl/index.jsx b/superset-frontend/src/explore/components/controls/DatasourceControl/index.jsx index 254ebe090254..98d8ce46c3db 100644 --- a/superset-frontend/src/explore/components/controls/DatasourceControl/index.jsx +++ b/superset-frontend/src/explore/components/controls/DatasourceControl/index.jsx @@ -236,10 +236,9 @@ class DatasourceControl extends React.PureComponent { const isSqlSupported = datasource.type === 'table'; const { user } = this.props; - const allowEdit = datasource.owners - ?.map(o => o.id || o.value) - .includes(user.userId); - isUserAdmin(user); + const allowEdit = + datasource.owners?.map(o => o.id || o.value).includes(user.userId) || + isUserAdmin(user); const editText = t('Edit dataset');