From 09554f97e88ea409e03ceefa47c3263f71027bcc Mon Sep 17 00:00:00 2001 From: Tejaaswini Narendra Date: Fri, 12 Jun 2020 15:44:51 +0000 Subject: [PATCH] Back to editor in app view mode should not be visible to users with only read application permissions --- app/client/src/pages/AppViewer/index.tsx | 17 +++++++++++++++-- .../pages/AppViewer/viewer/AppViewerHeader.tsx | 10 +++++++++- app/client/src/sagas/InitSagas.ts | 2 ++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/client/src/pages/AppViewer/index.tsx b/app/client/src/pages/AppViewer/index.tsx index 50b4b5c06a..4b0be58293 100644 --- a/app/client/src/pages/AppViewer/index.tsx +++ b/app/client/src/pages/AppViewer/index.tsx @@ -12,6 +12,7 @@ import { import { ReduxActionTypes, PageListPayload, + ApplicationPayload, } from "constants/ReduxActionConstants"; import { getPageList, @@ -35,6 +36,9 @@ import { } from "actions/metaActions"; import AppRoute from "pages/common/AppRoute"; import { editorInitializer } from "utils/EditorUtils"; +import { getCurrentOrg } from "selectors/organizationSelectors"; +import { PERMISSION_TYPE } from "pages/Applications/permissionHelpers"; +import { Organization } from "constants/orgConstants"; const AppViewWrapper = styled.div` margin-top: ${props => props.theme.headerHeight}; @@ -51,6 +55,7 @@ const AppViewerBody = styled.section` export type AppViewerProps = { currentDSLPageId?: string; currentLayoutId?: string; + currentApplication: ApplicationPayload | undefined; pages?: PageListPayload; initializeAppViewer: Function; isInitialized: boolean; @@ -86,8 +91,10 @@ class AppViewer extends Component< } public render() { - const { isInitialized } = this.props; + const { isInitialized, currentApplication } = this.props; + const userPermissions = currentApplication?.userPermissions ?? []; if (!isInitialized) return null; + const items: SideNavItemProps[] | undefined = this.props.pages && this.props.pages.map(page => ({ @@ -101,6 +108,7 @@ class AppViewer extends Component< loading: false, })); if (!this.state.registered) return null; + return ( - + @@ -136,6 +148,7 @@ const mapStateToProps = (state: AppState) => ({ pages: getPageList(state), isInitialized: getIsInitialized(state), editorURL: getEditorURL(state), + currentApplication: state.ui.applications.currentApplication, }); const mapDispatchToProps = (dispatch: any) => ({ diff --git a/app/client/src/pages/AppViewer/viewer/AppViewerHeader.tsx b/app/client/src/pages/AppViewer/viewer/AppViewerHeader.tsx index 39bc65f3b4..71fda01e83 100644 --- a/app/client/src/pages/AppViewer/viewer/AppViewerHeader.tsx +++ b/app/client/src/pages/AppViewer/viewer/AppViewerHeader.tsx @@ -3,6 +3,7 @@ import styled from "styled-components"; import StyledHeader from "components/designSystems/appsmith/StyledHeader"; import Button from "components/editorComponents/Button"; import { BACK_TO_EDITOR } from "constants/messages"; +import { isPermitted } from "pages/Applications/permissionHelpers"; const HeaderWrapper = styled(StyledHeader)` position: fixed; top: 0; @@ -13,12 +14,19 @@ const HeaderWrapper = styled(StyledHeader)` `; type AppViewerHeaderProps = { url?: string; + permissionRequired: string; + permissions: string[]; }; export const AppViewerHeader = (props: AppViewerHeaderProps) => { + const hasPermission = isPermitted( + props.permissions, + props.permissionRequired, + ); + return ( - {props.url && ( + {props.url && hasPermission && (