This is an automated email from the ASF dual-hosted git repository.

kgabryje pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 710c6f9412 chore: Chart context menu permissions cleanup (#30854)
710c6f9412 is described below

commit 710c6f9412edaff5dcde7ce3fa8aa654f2f35f04
Author: Kamil Gabryjelski <[email protected]>
AuthorDate: Wed Nov 6 15:23:22 2024 +0100

    chore: Chart context menu permissions cleanup (#30854)
---
 .../Chart/ChartContextMenu/ChartContextMenu.tsx    | 21 ++-------
 .../Chart/ChartContextMenu/usePermissions.ts       | 51 ++++++++++++++++++++++
 2 files changed, 54 insertions(+), 18 deletions(-)

diff --git 
a/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx 
b/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
index 9df0e73bc9..e5a94ba97f 100644
--- 
a/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
+++ 
b/superset-frontend/src/components/Chart/ChartContextMenu/ChartContextMenu.tsx
@@ -39,7 +39,6 @@ import {
   useTheme,
 } from '@superset-ui/core';
 import { RootState } from 'src/dashboard/types';
-import { findPermission } from 'src/utils/findPermission';
 import { Menu } from 'src/components/Menu';
 import { AntdDropdown as Dropdown } from 'src/components/index';
 import { updateDataMask } from 'src/dataMask/actions';
@@ -47,6 +46,7 @@ import { DrillDetailMenuItems } from '../DrillDetail';
 import { getMenuAdjustedY } from '../utils';
 import { MenuItemTooltip } from '../DisabledMenuItemTooltip';
 import { DrillByMenuItems } from '../DrillBy/DrillByMenuItems';
+import { usePermissions } from './usePermissions';
 
 export enum ContextMenuItem {
   CrossFilter,
@@ -88,23 +88,8 @@ const ChartContextMenu = (
 ) => {
   const theme = useTheme();
   const dispatch = useDispatch();
-  const canExplore = useSelector((state: RootState) =>
-    findPermission('can_explore', 'Superset', state.user?.roles),
-  );
-  const canWriteExploreFormData = useSelector((state: RootState) =>
-    findPermission('can_write', 'ExploreFormDataRestApi', state.user?.roles),
-  );
-  const canDatasourceSamples = useSelector((state: RootState) =>
-    findPermission('can_samples', 'Datasource', state.user?.roles),
-  );
-  const canDownload = useSelector((state: RootState) =>
-    findPermission('can_csv', 'Superset', state.user?.roles),
-  );
-  const canDrill = useSelector((state: RootState) =>
-    findPermission('can_drill', 'Dashboard', state.user?.roles),
-  );
-  const canDrillBy = (canExplore || canDrill) && canWriteExploreFormData;
-  const canDrillToDetail = (canExplore || canDrill) && canDatasourceSamples;
+  const { canDrillToDetail, canDrillBy, canDownload } = usePermissions();
+
   const crossFiltersEnabled = useSelector<RootState, boolean>(
     ({ dashboardInfo }) => dashboardInfo.crossFiltersEnabled,
   );
diff --git 
a/superset-frontend/src/components/Chart/ChartContextMenu/usePermissions.ts 
b/superset-frontend/src/components/Chart/ChartContextMenu/usePermissions.ts
new file mode 100644
index 0000000000..ef45cdf0b4
--- /dev/null
+++ b/superset-frontend/src/components/Chart/ChartContextMenu/usePermissions.ts
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useSelector } from 'react-redux';
+import { RootState } from 'src/dashboard/types';
+import { findPermission } from 'src/utils/findPermission';
+
+export const usePermissions = () => {
+  const canExplore = useSelector((state: RootState) =>
+    findPermission('can_explore', 'Superset', state.user?.roles),
+  );
+  const canWriteExploreFormData = useSelector((state: RootState) =>
+    findPermission('can_write', 'ExploreFormDataRestApi', state.user?.roles),
+  );
+  const canDatasourceSamples = useSelector((state: RootState) =>
+    findPermission('can_samples', 'Datasource', state.user?.roles),
+  );
+  const canDownload = useSelector((state: RootState) =>
+    findPermission('can_csv', 'Superset', state.user?.roles),
+  );
+  const canDrill = useSelector((state: RootState) =>
+    findPermission('can_drill', 'Dashboard', state.user?.roles),
+  );
+  const canDrillBy = (canExplore || canDrill) && canWriteExploreFormData;
+  const canDrillToDetail = (canExplore || canDrill) && canDatasourceSamples;
+
+  return {
+    canExplore,
+    canWriteExploreFormData,
+    canDatasourceSamples,
+    canDownload,
+    canDrill,
+    canDrillBy,
+    canDrillToDetail,
+  };
+};

Reply via email to