diff --git a/superset/assets/spec/javascripts/dashboard/components/gridComponents/Chart_spec.jsx b/superset/assets/spec/javascripts/dashboard/components/gridComponents/Chart_spec.jsx index 23d634cfc757..1933e5c558aa 100644 --- a/superset/assets/spec/javascripts/dashboard/components/gridComponents/Chart_spec.jsx +++ b/superset/assets/spec/javascripts/dashboard/components/gridComponents/Chart_spec.jsx @@ -57,6 +57,7 @@ describe('Chart', () => { editMode: false, isExpanded: false, supersetCanExplore: false, + supersetCanCSV: false, sliceCanEdit: false, }; diff --git a/superset/assets/src/dashboard/components/SliceHeader.jsx b/superset/assets/src/dashboard/components/SliceHeader.jsx index 9da155d25976..913a00dc4f22 100644 --- a/superset/assets/src/dashboard/components/SliceHeader.jsx +++ b/superset/assets/src/dashboard/components/SliceHeader.jsx @@ -41,6 +41,7 @@ const propTypes = { annotationError: PropTypes.object, sliceName: PropTypes.string, supersetCanExplore: PropTypes.bool, + supersetCanCSV: PropTypes.bool, sliceCanEdit: PropTypes.bool, }; @@ -61,6 +62,7 @@ const defaultProps = { isExpanded: false, sliceName: '', supersetCanExplore: false, + supersetCanCSV: false, sliceCanEdit: false, }; @@ -82,6 +84,7 @@ class SliceHeader extends React.PureComponent { innerRef, sliceName, supersetCanExplore, + supersetCanCSV, sliceCanEdit, editMode, updateSliceName, @@ -133,6 +136,7 @@ class SliceHeader extends React.PureComponent { exploreChart={exploreChart} exportCSV={exportCSV} supersetCanExplore={supersetCanExplore} + supersetCanCSV={supersetCanCSV} sliceCanEdit={sliceCanEdit} /> )} diff --git a/superset/assets/src/dashboard/components/SliceHeaderControls.jsx b/superset/assets/src/dashboard/components/SliceHeaderControls.jsx index b86b01272b14..e768e2af5495 100644 --- a/superset/assets/src/dashboard/components/SliceHeaderControls.jsx +++ b/superset/assets/src/dashboard/components/SliceHeaderControls.jsx @@ -36,6 +36,7 @@ const propTypes = { cachedDttm: PropTypes.string, updatedDttm: PropTypes.number, supersetCanExplore: PropTypes.bool, + supersetCanCSV: PropTypes.bool, sliceCanEdit: PropTypes.bool, toggleExpandSlice: PropTypes.func, forceRefresh: PropTypes.func, @@ -53,6 +54,7 @@ const defaultProps = { isCached: false, isExpanded: false, supersetCanExplore: false, + supersetCanCSV: false, sliceCanEdit: false, }; @@ -161,7 +163,9 @@ class SliceHeaderControls extends React.PureComponent { )} - {t('Export CSV')} + {this.props.supersetCanCSV && ( + {t('Export CSV')} + )} {this.props.supersetCanExplore && ( diff --git a/superset/assets/src/dashboard/components/gridComponents/Chart.jsx b/superset/assets/src/dashboard/components/gridComponents/Chart.jsx index 7d1f1674a83c..c54b8e72af75 100644 --- a/superset/assets/src/dashboard/components/gridComponents/Chart.jsx +++ b/superset/assets/src/dashboard/components/gridComponents/Chart.jsx @@ -45,6 +45,7 @@ const propTypes = { editMode: PropTypes.bool.isRequired, isExpanded: PropTypes.bool.isRequired, supersetCanExplore: PropTypes.bool.isRequired, + supersetCanCSV: PropTypes.bool.isRequired, sliceCanEdit: PropTypes.bool.isRequired, }; @@ -164,6 +165,7 @@ class Chart extends React.Component { toggleExpandSlice, timeout, supersetCanExplore, + supersetCanCSV, sliceCanEdit, } = this.props; @@ -198,6 +200,7 @@ class Chart extends React.Component { updateSliceName={updateSliceName} sliceName={sliceName} supersetCanExplore={supersetCanExplore} + supersetCanCSV={supersetCanCSV} sliceCanEdit={sliceCanEdit} /> diff --git a/superset/assets/src/dashboard/containers/Chart.jsx b/superset/assets/src/dashboard/containers/Chart.jsx index 7d689ecf09dd..e500e3365a12 100644 --- a/superset/assets/src/dashboard/containers/Chart.jsx +++ b/superset/assets/src/dashboard/containers/Chart.jsx @@ -62,6 +62,7 @@ function mapStateToProps( editMode: dashboardState.editMode, isExpanded: !!dashboardState.expandedSlices[id], supersetCanExplore: !!dashboardInfo.superset_can_explore, + supersetCanCSV: !!dashboardInfo.superset_can_csv, sliceCanEdit: !!dashboardInfo.slice_can_edit, }; } diff --git a/superset/assets/src/dashboard/reducers/getInitialState.js b/superset/assets/src/dashboard/reducers/getInitialState.js index 9b093cdbfdd2..57354c86a42b 100644 --- a/superset/assets/src/dashboard/reducers/getInitialState.js +++ b/superset/assets/src/dashboard/reducers/getInitialState.js @@ -174,6 +174,7 @@ export default function(bootstrapData) { dash_edit_perm: dashboard.dash_edit_perm, dash_save_perm: dashboard.dash_save_perm, superset_can_explore: dashboard.superset_can_explore, + superset_can_csv: dashboard.superset_can_csv, slice_can_edit: dashboard.slice_can_edit, common: { flash_messages: common.flash_messages, diff --git a/superset/views/core.py b/superset/views/core.py index fa704989d89f..639505fcd00f 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -2146,6 +2146,7 @@ def dashboard(self, dashboard_id): security_manager.can_access('can_save_dash', 'Superset') dash_save_perm = security_manager.can_access('can_save_dash', 'Superset') superset_can_explore = security_manager.can_access('can_explore', 'Superset') + superset_can_csv = security_manager.can_access('can_csv', 'Superset') slice_can_edit = security_manager.can_access('can_edit', 'SliceModelView') standalone_mode = request.args.get('standalone') == 'true' @@ -2167,6 +2168,7 @@ def dashboard(**kwargs): # noqa 'dash_save_perm': dash_save_perm, 'dash_edit_perm': dash_edit_perm, 'superset_can_explore': superset_can_explore, + 'superset_can_csv': superset_can_csv, 'slice_can_edit': slice_can_edit, })