From 41bea4cafa02c8caec9a115ff0af4ab656744de1 Mon Sep 17 00:00:00 2001 From: NFish Date: Wed, 18 Sep 2024 16:54:04 +0800 Subject: [PATCH] validate user permission before enter app detail page (#8527) --- .../app/(appDetailLayout)/[appId]/layout.tsx | 9 +++++++-- web/app/components/app/overview/settings/index.tsx | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx index e728749b85..96ee874d53 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx @@ -109,6 +109,11 @@ const AppDetailLayout: FC = (props) => { setAppDetail() fetchAppDetail({ url: '/apps', id: appId }).then((res) => { // redirection + const canIEditApp = isCurrentWorkspaceEditor + if (!canIEditApp && (pathname.endsWith('configuration') || pathname.endsWith('workflow') || pathname.endsWith('logs'))) { + router.replace(`/app/${appId}/overview`) + return + } if ((res.mode === 'workflow' || res.mode === 'advanced-chat') && (pathname).endsWith('configuration')) { router.replace(`/app/${appId}/workflow`) } @@ -118,7 +123,7 @@ const AppDetailLayout: FC = (props) => { else { setAppDetail({ ...res, enable_sso: false }) setNavigation(getNavigations(appId, isCurrentWorkspaceEditor, res.mode)) - if (systemFeatures.enable_web_sso_switch_component) { + if (systemFeatures.enable_web_sso_switch_component && canIEditApp) { fetchAppSSO({ appId }).then((ssoRes) => { setAppDetail({ ...res, enable_sso: ssoRes.enabled }) }) @@ -128,7 +133,7 @@ const AppDetailLayout: FC = (props) => { if (e.status === 404) router.replace('/apps') }) - }, [appId, isCurrentWorkspaceEditor, systemFeatures]) + }, [appId, isCurrentWorkspaceEditor, systemFeatures, getNavigations, pathname, router, setAppDetail]) useUnmount(() => { setAppDetail() diff --git a/web/app/components/app/overview/settings/index.tsx b/web/app/components/app/overview/settings/index.tsx index a501d06ce4..db019286ac 100644 --- a/web/app/components/app/overview/settings/index.tsx +++ b/web/app/components/app/overview/settings/index.tsx @@ -16,7 +16,7 @@ import type { AppIconType, AppSSO, Language } from '@/types/app' import { useToastContext } from '@/app/components/base/toast' import { languages } from '@/i18n/language' import Tooltip from '@/app/components/base/tooltip' -import AppContext from '@/context/app-context' +import AppContext, { useAppContext } from '@/context/app-context' import type { AppIconSelection } from '@/app/components/base/app-icon-picker' import AppIconPicker from '@/app/components/base/app-icon-picker' @@ -57,6 +57,7 @@ const SettingsModal: FC = ({ onSave, }) => { const systemFeatures = useContextSelector(AppContext, state => state.systemFeatures) + const { isCurrentWorkspaceEditor } = useAppContext() const { notify } = useToastContext() const [isShowMore, setIsShowMore] = useState(false) const { @@ -265,7 +266,7 @@ const SettingsModal: FC = ({ } asChild={false} > - setInputInfo({ ...inputInfo, enable_sso: v })}> + setInputInfo({ ...inputInfo, enable_sso: v })}>

{t(`${prefixSettings}.sso.description`)}