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 <[email protected]> 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" />}>
