mirror of
https://github.com/apache/superset.git
synced 2026-05-08 01:15:46 +00:00
fix(sqllab): remove link to sqllab if missing perms (#22566)
This commit is contained in:
@@ -20,13 +20,13 @@
|
||||
import React from 'react';
|
||||
import { render, screen, act, waitFor } from 'spec/helpers/testing-library';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { SupersetClient, DatasourceType } from '@superset-ui/core';
|
||||
import { DatasourceType, JsonObject, SupersetClient } from '@superset-ui/core';
|
||||
import fetchMock from 'fetch-mock';
|
||||
import DatasourceControl from '.';
|
||||
|
||||
const SupersetClientGet = jest.spyOn(SupersetClient, 'get');
|
||||
|
||||
const createProps = () => ({
|
||||
const createProps = (overrides: JsonObject = {}) => ({
|
||||
hovered: false,
|
||||
type: 'DatasourceControl',
|
||||
label: 'Datasource',
|
||||
@@ -64,6 +64,7 @@ const createProps = () => ({
|
||||
},
|
||||
onChange: jest.fn(),
|
||||
onDatasourceSave: jest.fn(),
|
||||
...overrides,
|
||||
});
|
||||
|
||||
async function openAndSaveChanges(datasource: any) {
|
||||
@@ -104,6 +105,52 @@ test('Should open a menu', async () => {
|
||||
expect(screen.getByText('View in SQL Lab')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('Should not show SQL Lab for non sql_lab role', async () => {
|
||||
const props = createProps({
|
||||
user: {
|
||||
createdOn: '2021-04-27T18:12:38.952304',
|
||||
email: 'gamma',
|
||||
firstName: 'gamma',
|
||||
isActive: true,
|
||||
lastName: 'gamma',
|
||||
permissions: {},
|
||||
roles: { Gamma: [] },
|
||||
userId: 2,
|
||||
username: 'gamma',
|
||||
},
|
||||
});
|
||||
render(<DatasourceControl {...props} />);
|
||||
|
||||
userEvent.click(screen.getByTestId('datasource-menu-trigger'));
|
||||
|
||||
expect(await screen.findByText('Edit dataset')).toBeInTheDocument();
|
||||
expect(screen.getByText('Swap dataset')).toBeInTheDocument();
|
||||
expect(screen.queryByText('View in SQL Lab')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('Should show SQL Lab for sql_lab role', async () => {
|
||||
const props = createProps({
|
||||
user: {
|
||||
createdOn: '2021-04-27T18:12:38.952304',
|
||||
email: 'sql',
|
||||
firstName: 'sql',
|
||||
isActive: true,
|
||||
lastName: 'sql',
|
||||
permissions: {},
|
||||
roles: { Gamma: [], sql_lab: [] },
|
||||
userId: 2,
|
||||
username: 'sql',
|
||||
},
|
||||
});
|
||||
render(<DatasourceControl {...props} />);
|
||||
|
||||
userEvent.click(screen.getByTestId('datasource-menu-trigger'));
|
||||
|
||||
expect(await screen.findByText('Edit dataset')).toBeInTheDocument();
|
||||
expect(screen.getByText('Swap dataset')).toBeInTheDocument();
|
||||
expect(screen.getByText('View in SQL Lab')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('Click on Swap dataset option', async () => {
|
||||
const props = createProps();
|
||||
SupersetClientGet.mockImplementation(
|
||||
|
||||
@@ -42,7 +42,10 @@ import ErrorAlert from 'src/components/ErrorMessage/ErrorAlert';
|
||||
import WarningIconWithTooltip from 'src/components/WarningIconWithTooltip';
|
||||
import { URL_PARAMS } from 'src/constants';
|
||||
import { getDatasourceAsSaveableDataset } from 'src/utils/datasourceUtils';
|
||||
import { isUserAdmin } from 'src/dashboard/util/permissionUtils';
|
||||
import {
|
||||
canUserAccessSqlLab,
|
||||
isUserAdmin,
|
||||
} from 'src/dashboard/util/permissionUtils';
|
||||
import ModalTrigger from 'src/components/ModalTrigger';
|
||||
import ViewQueryModalFooter from 'src/explore/components/controls/ViewQueryModalFooter';
|
||||
import ViewQuery from 'src/explore/components/controls/ViewQuery';
|
||||
@@ -279,6 +282,8 @@ class DatasourceControl extends React.PureComponent {
|
||||
datasource.owners?.map(o => o.id || o.value).includes(user.userId) ||
|
||||
isUserAdmin(user);
|
||||
|
||||
const canAccessSqlLab = canUserAccessSqlLab(user);
|
||||
|
||||
const editText = t('Edit dataset');
|
||||
|
||||
const defaultDatasourceMenu = (
|
||||
@@ -303,7 +308,7 @@ class DatasourceControl extends React.PureComponent {
|
||||
</Menu.Item>
|
||||
)}
|
||||
<Menu.Item key={CHANGE_DATASET}>{t('Swap dataset')}</Menu.Item>
|
||||
{datasource && (
|
||||
{datasource && canAccessSqlLab && (
|
||||
<Menu.Item key={VIEW_IN_SQL_LAB}>{t('View in SQL Lab')}</Menu.Item>
|
||||
)}
|
||||
</Menu>
|
||||
@@ -333,7 +338,9 @@ class DatasourceControl extends React.PureComponent {
|
||||
responsive
|
||||
/>
|
||||
</Menu.Item>
|
||||
<Menu.Item key={VIEW_IN_SQL_LAB}>{t('View in SQL Lab')}</Menu.Item>
|
||||
{canAccessSqlLab && (
|
||||
<Menu.Item key={VIEW_IN_SQL_LAB}>{t('View in SQL Lab')}</Menu.Item>
|
||||
)}
|
||||
<Menu.Item key={SAVE_AS_DATASET}>{t('Save as dataset')}</Menu.Item>
|
||||
</Menu>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user