diff --git a/superset/assets/src/dashboard/components/Controls.jsx b/superset/assets/src/dashboard/components/Controls.jsx
index 00cb6d56dc5fb..feacf961ba961 100644
--- a/superset/assets/src/dashboard/components/Controls.jsx
+++ b/superset/assets/src/dashboard/components/Controls.jsx
@@ -143,20 +143,22 @@ class Controls extends React.PureComponent {
/>
}
/>
-
- }
- />
+ {dashboard.dash_save_perm &&
+
+ }
+ />
+ }
{editMode &&
' + errorMsg);
+ notify.error(t('Sorry, there was an error saving this dashboard: ') + errorMsg);
},
});
}
diff --git a/superset/assets/src/dashboard/components/SliceHeader.jsx b/superset/assets/src/dashboard/components/SliceHeader.jsx
index 8abcc86d61c72..6db9c683c9e5f 100644
--- a/superset/assets/src/dashboard/components/SliceHeader.jsx
+++ b/superset/assets/src/dashboard/components/SliceHeader.jsx
@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import moment from 'moment';
+import { connect } from 'react-redux';
import { t } from '../../locales';
import EditableTitle from '../../components/EditableTitle';
@@ -8,6 +9,8 @@ import TooltipWrapper from '../../components/TooltipWrapper';
const propTypes = {
slice: PropTypes.object.isRequired,
+ supersetCanExplore: PropTypes.bool,
+ sliceCanEdit: PropTypes.bool,
isExpanded: PropTypes.bool,
isCached: PropTypes.bool,
cachedDttm: PropTypes.string,
@@ -72,6 +75,7 @@ class SliceHeader extends React.PureComponent {
title={slice.slice_name}
canEdit={!!this.props.updateSliceName && this.props.editMode}
onSaveTitle={this.onSaveTitle}
+ showTooltip={this.props.editMode}
noPermitTooltip={'You don\'t have the rights to alter this dashboard.'}
/>
{!!Object.values(this.props.annotationQuery || {}).length &&
@@ -126,15 +130,17 @@ class SliceHeader extends React.PureComponent {
}
-
-
-
-
-
+ {this.props.sliceCanEdit &&
+
+
+
+
+
+ }
-
-
-
-
-
+ {this.props.supersetCanExplore &&
+
+
+
+
+
+ }
{this.props.editMode &&
({}))(SliceHeader);
diff --git a/superset/views/core.py b/superset/views/core.py
index a79ff2b4da48b..0359cae739118 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -2046,6 +2046,8 @@ def dashboard(**kwargs): # noqa
dash_edit_perm = check_ownership(dash, raise_if_false=False)
dash_save_perm = \
dash_edit_perm and security_manager.can_access('can_save_dash', 'Superset')
+ superset_can_explore = security_manager.can_access('can_explore', 'Superset')
+ slice_can_edit = security_manager.can_access('can_edit', 'SliceModelView')
standalone_mode = request.args.get('standalone') == 'true'
@@ -2054,6 +2056,8 @@ def dashboard(**kwargs): # noqa
'standalone_mode': standalone_mode,
'dash_save_perm': dash_save_perm,
'dash_edit_perm': dash_edit_perm,
+ 'superset_can_explore': superset_can_explore,
+ 'slice_can_edit': slice_can_edit,
})
bootstrap_data = {