diff --git a/frontend/src/metabase/query_builder/components/QueryHeader.jsx b/frontend/src/metabase/query_builder/components/QueryHeader.jsx index f394ebd5cac657b8ac892ff5de98034f211ff78b..58d6bd6c0404f4952cf964bfc76fd3697e36a1c3 100644 --- a/frontend/src/metabase/query_builder/components/QueryHeader.jsx +++ b/frontend/src/metabase/query_builder/components/QueryHeader.jsx @@ -207,7 +207,7 @@ export default class QueryHeader extends Component { } // persistence buttons on saved cards - if (!isNew) { + if (!isNew && card.can_write) { if (!isEditing) { if (this.state.recentlySaved) { // existing card + not editing + recently saved = save confirmation @@ -219,7 +219,6 @@ export default class QueryHeader extends Component { </span> </button> ]); - } else { // edit button buttonSections.push([ diff --git a/src/metabase/api/card.clj b/src/metabase/api/card.clj index cf7bc5524ed37e44a139e7bd5f26b397842d2bda..d205feba259d27fe23b66617360b47a355886154 100644 --- a/src/metabase/api/card.clj +++ b/src/metabase/api/card.clj @@ -203,7 +203,7 @@ "Get `Card` with ID." [id] (-> (read-check Card id) - (hydrate :creator :dashboard_count :labels :collection) + (hydrate :creator :dashboard_count :labels :can_write :collection) (assoc :actor_id *current-user-id*) (->> (events/publish-event! :card-read)) (dissoc :actor_id))) diff --git a/test/metabase/api/card_test.clj b/test/metabase/api/card_test.clj index e04997b6cf727db171b0e7d3ac8f6aafeba2277e..f01ade9cc49b5fc134ddaf04138dc23182b8bc6a 100644 --- a/test/metabase/api/card_test.clj +++ b/test/metabase/api/card_test.clj @@ -186,6 +186,7 @@ :id $ :display "table" :visualization_settings {} + :can_write true :created_at $ :database_id database-id ; these should be inferred from the dataset_query :table_id table-id