You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2021/08/17 15:29:19 UTC

[superset] branch hugh/rbac-global created (now 542353b)

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

hugh pushed a change to branch hugh/rbac-global
in repository https://gitbox.apache.org/repos/asf/superset.git.


      at 542353b  setup rbac

This branch includes the following new commits:

     new 542353b  setup rbac

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[superset] 01/01: setup rbac

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugh pushed a commit to branch hugh/rbac-global
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 542353b4d5587620302fa72e01d14e9cbd8aa377
Author: hughhhh <hu...@gmail.com>
AuthorDate: Mon Aug 16 19:48:38 2021 -0400

    setup rbac
---
 .../src/components/Menu/MenuRight.tsx              | 46 ++++++++++++++++------
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/superset-frontend/src/components/Menu/MenuRight.tsx b/superset-frontend/src/components/Menu/MenuRight.tsx
index 35d2cb0..2aff1d3 100644
--- a/superset-frontend/src/components/Menu/MenuRight.tsx
+++ b/superset-frontend/src/components/Menu/MenuRight.tsx
@@ -21,24 +21,44 @@ import { MainNav as Menu } from 'src/common/components';
 import { t, styled, css, SupersetTheme } from '@superset-ui/core';
 import { Link } from 'react-router-dom';
 import Icons from 'src/components/Icons';
+import findPermission from 'src/dashboard/util/findPermission';
 import LanguagePicker from './LanguagePicker';
 import { NavBarProps, MenuObjectProps } from './Menu';
 
+const appContainer = document.getElementById('app') || '{}';
+const bootstrapData = JSON.parse(appContainer.getAttribute('data-bootstrap'));
+console.log('userRoles', bootstrapData.user.roles);
+
+const { roles } = bootstrapData.user;
+console.log(findPermission('can_dashboard', 'Superset', roles));
+console.log(findPermission('can_sqllab', 'Superset', roles));
+console.log(findPermission('can_slice', 'Superset', roles));
+
+const canChart = findPermission('can_write', 'Chart', roles);
+const canSql = findPermission('can_sqllab', 'Superset', roles);
+const canDashboard = findPermission('can_write', 'Dashboard', roles);
+
+// if user has any of these roles the dropdown will appear
+const showActionDropdown = canChart || canSql || canDashboard;
+
 export const dropdownItems = [
   {
     label: t('SQL query'),
     url: '/superset/sqllab?new=true',
     icon: 'fa-fw fa-search',
+    show: canSql,
   },
   {
     label: t('Chart'),
     url: '/chart/add',
     icon: 'fa-fw fa-bar-chart',
+    show: canChart,
   },
   {
     label: t('Dashboard'),
     url: '/dashboard/new',
     icon: 'fa-fw fa-dashboard',
+    show: canDashboard,
   },
 ];
 
@@ -94,17 +114,21 @@ const RightMenu = ({
           }
           icon={<Icons.TriangleDown />}
         >
-          {dropdownItems.map(menu => (
-            <Menu.Item key={menu.label}>
-              <a href={menu.url}>
-                <i
-                  data-test={`menu-item-${menu.label}`}
-                  className={`fa ${menu.icon}`}
-                />{' '}
-                {menu.label}
-              </a>
-            </Menu.Item>
-          ))}
+          {showActionDropdown &&
+            dropdownItems.map(
+              menu =>
+                menu.show && (
+                  <Menu.Item key={menu.label}>
+                    <a href={menu.url}>
+                      <i
+                        data-test={`menu-item-${menu.label}`}
+                        className={`fa ${menu.icon}`}
+                      />{' '}
+                      {menu.label}
+                    </a>
+                  </Menu.Item>
+                ),
+            )}
         </SubMenu>
       )}
       <SubMenu title="Settings" icon={<Icons.TriangleDown iconSize="xl" />}>