From 81f2bd1fc2322807fc084103b6ff6a92bd28b6de Mon Sep 17 00:00:00 2001
From: Dalton <daltojohnso@users.noreply.github.com>
Date: Mon, 31 Jan 2022 11:44:51 -0700
Subject: [PATCH] Hide explore results button for no-data users (#20065)

---
 .../components/view/ViewHeader.jsx            |  6 ++++-
 .../components/view/ViewHeader.unit.spec.js   | 23 +++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx b/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx
index 34cfed53521..8e95b605ea1 100644
--- a/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx
+++ b/frontend/src/metabase/query_builder/components/view/ViewHeader.jsx
@@ -398,8 +398,12 @@ function ViewTitleHeaderRightSide(props) {
     onCollapseFilters,
   } = props;
   const isShowingNotebook = queryBuilderMode === "notebook";
+  const canRunAdhocQueries = !question.query().readOnly();
   const hasExploreResultsLink =
-    isNative && isSaved && MetabaseSettings.get("enable-nested-queries");
+    isNative &&
+    isSaved &&
+    canRunAdhocQueries &&
+    MetabaseSettings.get("enable-nested-queries");
 
   return (
     <div
diff --git a/frontend/src/metabase/query_builder/components/view/ViewHeader.unit.spec.js b/frontend/src/metabase/query_builder/components/view/ViewHeader.unit.spec.js
index 484c7d85255..5dc6b109c7a 100644
--- a/frontend/src/metabase/query_builder/components/view/ViewHeader.unit.spec.js
+++ b/frontend/src/metabase/query_builder/components/view/ViewHeader.unit.spec.js
@@ -455,6 +455,29 @@ describe("View Header | Saved GUI question", () => {
   });
 });
 
+describe("View Header | native question without write permissions on database (eg user without self serve data permissions)", () => {
+  let originalNativePermissions;
+  beforeEach(() => {
+    setupNative();
+    originalNativePermissions = SAMPLE_DATABASE.native_permissions;
+    SAMPLE_DATABASE.native_permissions = "none";
+  });
+
+  afterEach(() => {
+    SAMPLE_DATABASE.native_permissions = originalNativePermissions;
+  });
+
+  it("does not display question database", () => {
+    const { question } = setupNative();
+    const databaseName = question.database().displayName();
+    expect(screen.queryByText(databaseName)).not.toBeInTheDocument();
+  });
+
+  it("does not offer to explore query results", () => {
+    expect(screen.queryByText("Explore results")).not.toBeInTheDocument();
+  });
+});
+
 describe("View Header | Not saved native question", () => {
   it("does not display question database", () => {
     const { question } = setupNative();
-- 
GitLab