From ee797713efcba3ef2651b9bb9766a4ccd7d34beb Mon Sep 17 00:00:00 2001 From: Olfa Maslah Date: Wed, 10 Jun 2026 17:53:10 -0400 Subject: [PATCH 1/2] hide OneDrive if not OSS --- frontend/app/api/queries/useGetConnectorsQuery.ts | 11 +++++++++-- frontend/lib/brand.ts | 8 +++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/frontend/app/api/queries/useGetConnectorsQuery.ts b/frontend/app/api/queries/useGetConnectorsQuery.ts index d48c5bea0..7e153bef2 100644 --- a/frontend/app/api/queries/useGetConnectorsQuery.ts +++ b/frontend/app/api/queries/useGetConnectorsQuery.ts @@ -266,6 +266,9 @@ export const useGetConnectorAccessQuery = ( "queryKey" | "queryFn" >, ) => { + const isCloudBrand = useIsCloudBrand(); + const { isIbmAuthMode } = useAuth(); + async function fetchConnectorAccess(): Promise { const response = await fetch("/api/connectors/user-access"); if (!response.ok) { @@ -274,11 +277,15 @@ export const useGetConnectorAccessQuery = ( ); } const data = await response.json(); - return Array.isArray(data.connectors) ? data.connectors : []; + const connectors = Array.isArray(data.connectors) ? data.connectors : []; + const deploymentCtx = { isCloudBrand, isIbmAuthMode }; + return connectors.filter((c: ConnectorAccessItem) => + isConnectorTypeVisible(c.type, deploymentCtx), + ); } return useQuery({ - queryKey: CONNECTOR_USER_ACCESS_KEY, + queryKey: [...CONNECTOR_USER_ACCESS_KEY, isCloudBrand, isIbmAuthMode], queryFn: fetchConnectorAccess, refetchOnWindowFocus: false, ...options, diff --git a/frontend/lib/brand.ts b/frontend/lib/brand.ts index d05947f04..ebcac330b 100644 --- a/frontend/lib/brand.ts +++ b/frontend/lib/brand.ts @@ -53,8 +53,8 @@ export function isConnectorAllowedByWorkspace( /** * Connectors tab visibility: workspace policy first, then deployment rules. - * Explicit `storedAccess[type] === true` (saved in Connectors Permission) overrides - * deployment filters so admins can re-enable types like OneDrive on cloud brand. + * Explicit `storedAccess[type] === true` overrides deployment filters except + * OneDrive outside OSS brand (hidden in SaaS/cloud UI). */ export function isConnectorShownInWorkspace( type: string, @@ -65,7 +65,9 @@ export function isConnectorShownInWorkspace( }: { isCloudBrand: boolean; isIbmAuthMode: boolean }, ): boolean { if (!isConnectorAllowedByWorkspace(type, storedAccess)) return false; - if (storedAccess[type] === true) return true; + if (storedAccess[type] === true && !(type === "onedrive" && cloudBrand)) { + return true; + } return isConnectorTypeVisible(type, { isCloudBrand: cloudBrand, isIbmAuthMode, From 9c24da479c9ab2acf681d1977734fee1ede03c4b Mon Sep 17 00:00:00 2001 From: Olfa Maslah Date: Wed, 10 Jun 2026 18:01:38 -0400 Subject: [PATCH 2/2] fix: align connector access mutation cache with deployment filter useUpdateConnectorAccessMutation wrote unfiltered results to CONNECTOR_USER_ACCESS_KEY while the query caches under brand/auth context. Share connectorUserAccessQueryKey and filterConnectorAccessItems with useGetConnectorAccessQuery so saves update the correct entry. --- .../app/api/queries/useGetConnectorsQuery.ts | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/frontend/app/api/queries/useGetConnectorsQuery.ts b/frontend/app/api/queries/useGetConnectorsQuery.ts index 7e153bef2..d0a0aa27a 100644 --- a/frontend/app/api/queries/useGetConnectorsQuery.ts +++ b/frontend/app/api/queries/useGetConnectorsQuery.ts @@ -260,6 +260,22 @@ export interface ConnectorAccessItem { export const CONNECTOR_USER_ACCESS_KEY = ["connector-user-access"] as const; +export function connectorUserAccessQueryKey( + isCloudBrand: boolean, + isIbmAuthMode: boolean, +) { + return [...CONNECTOR_USER_ACCESS_KEY, isCloudBrand, isIbmAuthMode] as const; +} + +function filterConnectorAccessItems( + connectors: ConnectorAccessItem[], + deploymentCtx: { isCloudBrand: boolean; isIbmAuthMode: boolean }, +): ConnectorAccessItem[] { + return connectors.filter((c) => + isConnectorTypeVisible(c.type, deploymentCtx), + ); +} + export const useGetConnectorAccessQuery = ( options?: Omit< UseQueryOptions, @@ -279,13 +295,11 @@ export const useGetConnectorAccessQuery = ( const data = await response.json(); const connectors = Array.isArray(data.connectors) ? data.connectors : []; const deploymentCtx = { isCloudBrand, isIbmAuthMode }; - return connectors.filter((c: ConnectorAccessItem) => - isConnectorTypeVisible(c.type, deploymentCtx), - ); + return filterConnectorAccessItems(connectors, deploymentCtx); } return useQuery({ - queryKey: [...CONNECTOR_USER_ACCESS_KEY, isCloudBrand, isIbmAuthMode], + queryKey: connectorUserAccessQueryKey(isCloudBrand, isIbmAuthMode), queryFn: fetchConnectorAccess, refetchOnWindowFocus: false, ...options, @@ -294,6 +308,13 @@ export const useGetConnectorAccessQuery = ( export const useUpdateConnectorAccessMutation = () => { const queryClient = useQueryClient(); + const isCloudBrand = useIsCloudBrand(); + const { isIbmAuthMode } = useAuth(); + const deploymentCtx = { isCloudBrand, isIbmAuthMode }; + const accessQueryKey = connectorUserAccessQueryKey( + isCloudBrand, + isIbmAuthMode, + ); return useMutation({ mutationFn: async ( @@ -311,10 +332,11 @@ export const useUpdateConnectorAccessMutation = () => { ); } const data = await response.json(); - return Array.isArray(data.connectors) ? data.connectors : []; + const connectors = Array.isArray(data.connectors) ? data.connectors : []; + return filterConnectorAccessItems(connectors, deploymentCtx); }, onSuccess: (connectors) => { - queryClient.setQueryData(CONNECTOR_USER_ACCESS_KEY, connectors); + queryClient.setQueryData(accessQueryKey, connectors); queryClient.invalidateQueries(connectorsQueryFilter); toast.success("Connectors permission saved"); },