From bfe3225ac73cec179930e7328a9d56ebc2cd2c7a Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Fri, 8 May 2026 15:57:18 -0300 Subject: [PATCH 1/4] Display warning based on permission --- .../components/ConfigureSSO/ConfigureSSO.tsx | 106 ++++++++++++------ 1 file changed, 74 insertions(+), 32 deletions(-) diff --git a/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx b/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx index dc1b82dd8d2..b76cdbca898 100644 --- a/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx +++ b/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx @@ -1,11 +1,13 @@ -import { __internal_useUserEnterpriseConnections } from '@clerk/shared/react'; +import { __internal_useUserEnterpriseConnections, useSession } from '@clerk/shared/react'; import type { __experimental_ConfigureSSOProps } from '@clerk/shared/types'; import React from 'react'; +import { Protect } from '@/common'; import { withCoreUserGuard } from '@/contexts'; -import { Col, descriptors, Flow } from '@/customizables'; +import { Col, descriptors, Flex, Flow, Heading, Icon, Text } from '@/customizables'; import { withCardStateProvider } from '@/elements/contexts'; import { ProfileCard } from '@/elements/ProfileCard'; +import { ExclamationTriangle } from '@/icons'; import { Route, Switch } from '@/router'; import { ConfigureSSOFlowProvider } from './ConfigureSSOContext'; @@ -61,52 +63,92 @@ const ConfigureSSOCardContent = () => { const { data: enterpriseConnections, isLoading } = __internal_useUserEnterpriseConnections({ enabled: true }); // Currently FAPI only supports one enterprise connection per user const enterpriseConnection = enterpriseConnections?.[0]; + const { session } = useSession(); // Initial-load gate at root — wizard never sees isLoading if (isLoading && !enterpriseConnection) { return ; } + const isPersonalWorkspace = !session?.lastActiveOrganizationId; + return ( - - + !isPersonalWorkspace && has({ permission: 'org:sys_enterprise_connections:manage' })} + fallback={} + > + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + + ); }; +const MissingManageEnterpriseConnectionsOrganizationPermission = () => ( + ({ flex: 1, padding: t.space.$8 })} + > + ({ gap: t.space.$2, textAlign: 'center', maxWidth: t.sizes.$94 })} + > + ({ width: t.sizes.$8, height: t.sizes.$8, color: t.colors.$neutralAlpha600 })} + /> + ({ fontSize: t.fontSizes.$lg })} + > + You do not have permission to manage enterprise connections + + + Contact your organization administrator in order to have permissions to manage enterprise connections. + + + +); + export const ConfigureSSO: React.ComponentType<__experimental_ConfigureSSOProps> = withCardStateProvider(ConfigureSSOInternal); From 51e28cf81d8d9111615574f6a9a36fa23798bcc3 Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Fri, 8 May 2026 16:17:02 -0300 Subject: [PATCH 2/4] Add localization keys --- packages/localizations/src/ar-SA.ts | 4 + packages/localizations/src/be-BY.ts | 5 + packages/localizations/src/bg-BG.ts | 5 + packages/localizations/src/bn-IN.ts | 4 + packages/localizations/src/ca-ES.ts | 5 + packages/localizations/src/cs-CZ.ts | 4 + packages/localizations/src/da-DK.ts | 5 + packages/localizations/src/de-DE.ts | 5 + packages/localizations/src/el-GR.ts | 5 + packages/localizations/src/en-GB.ts | 5 + packages/localizations/src/en-US.ts | 5 + packages/localizations/src/es-CR.ts | 5 + packages/localizations/src/es-ES.ts | 5 + packages/localizations/src/es-MX.ts | 5 + packages/localizations/src/es-UY.ts | 5 + packages/localizations/src/fa-IR.ts | 4 + packages/localizations/src/fi-FI.ts | 4 + packages/localizations/src/fr-FR.ts | 5 + packages/localizations/src/he-IL.ts | 4 + packages/localizations/src/hi-IN.ts | 5 + packages/localizations/src/hr-HR.ts | 5 + packages/localizations/src/hu-HU.ts | 5 + packages/localizations/src/id-ID.ts | 4 + packages/localizations/src/is-IS.ts | 5 + packages/localizations/src/it-IT.ts | 5 + packages/localizations/src/ja-JP.ts | 4 + packages/localizations/src/kk-KZ.ts | 4 + packages/localizations/src/ko-KR.ts | 4 + packages/localizations/src/mn-MN.ts | 4 + packages/localizations/src/ms-MY.ts | 4 + packages/localizations/src/nb-NO.ts | 4 + packages/localizations/src/nl-BE.ts | 5 + packages/localizations/src/nl-NL.ts | 5 + packages/localizations/src/pl-PL.ts | 5 + packages/localizations/src/pt-BR.ts | 5 + packages/localizations/src/pt-PT.ts | 4 + packages/localizations/src/ro-RO.ts | 5 + packages/localizations/src/ru-RU.ts | 5 + packages/localizations/src/sk-SK.ts | 5 + packages/localizations/src/sr-RS.ts | 5 + packages/localizations/src/sv-SE.ts | 4 + packages/localizations/src/ta-IN.ts | 4 + packages/localizations/src/te-IN.ts | 4 + packages/localizations/src/th-TH.ts | 4 + packages/localizations/src/tr-TR.ts | 4 + packages/localizations/src/uk-UA.ts | 5 + packages/localizations/src/vi-VN.ts | 4 + packages/localizations/src/zh-CN.ts | 4 + packages/localizations/src/zh-TW.ts | 4 + packages/shared/src/types/localization.ts | 4 + .../components/ConfigureSSO/ConfigureSSO.tsx | 103 +++++++++--------- 51 files changed, 278 insertions(+), 52 deletions(-) diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index e32c9bfc2b7..1650fbf5f7d 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -179,6 +179,10 @@ export const arSA: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'تواصل مع مسؤول مؤسستك للحصول على أذونات لإدارة الاتصالات المؤسسية.', + title: 'ليس لديك إذن لإدارة الاتصالات المؤسسية', + }, navbar: { title: 'تكوين تسجيل الدخول الموحد (SSO)', }, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 2b16a7ae936..5a1724ed188 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -179,6 +179,11 @@ export const beBY: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Звярніцеся да адміністратара вашай арганізацыі, каб атрымаць дазволы на кіраванне карпаратыўнымі падключэннямі.', + title: 'У вас няма дазволу на кіраванне карпаратыўнымі падключэннямі', + }, navbar: { title: 'Налада адзінага ўваходу (SSO)', }, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 96704ca286f..855f8bd4241 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -180,6 +180,11 @@ export const bgBG: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Свържете се с администратора на вашата организация, за да получите разрешения за управление на корпоративни връзки.', + title: 'Нямате разрешение да управлявате корпоративни връзки', + }, navbar: { title: 'Конфигуриране на единен вход (SSO)', }, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 765c3d7815a..f928a614942 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -179,6 +179,10 @@ export const bnIN: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'এন্টারপ্রাইজ সংযোগ পরিচালনার অনুমতি পেতে আপনার সংস্থার প্রশাসকের সাথে যোগাযোগ করুন।', + title: 'এন্টারপ্রাইজ সংযোগ পরিচালনার অনুমতি আপনার নেই', + }, navbar: { title: 'একক সাইন-অন (SSO) কনফিগার করুন', }, diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index fd021b11257..43c23922c45 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -186,6 +186,11 @@ export const caES: LocalizationResource = { year: 'Any', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + "Contacta amb l'administrador de la teva organització per obtenir permisos per gestionar connexions empresarials.", + title: 'No tens permís per gestionar connexions empresarials', + }, navbar: { title: "Configura l'inici de sessió únic (SSO)", }, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index e23888e312f..7723881510c 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -183,6 +183,10 @@ export const csCZ: LocalizationResource = { year: 'Rok', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Kontaktujte správce vaší organizace, abyste získali oprávnění ke správě podnikových připojení.', + title: 'Nemáte oprávnění ke správě podnikových připojení', + }, navbar: { title: 'Nastavit jednotné přihlášení (SSO)', }, diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 5df63b312ed..fe5673f9627 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -179,6 +179,11 @@ export const daDK: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Kontakt din organisations administrator for at få tilladelse til at administrere virksomhedsforbindelser.', + title: 'Du har ikke tilladelse til at administrere virksomhedsforbindelser', + }, navbar: { title: 'Konfigurer single sign-on (SSO)', }, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index db24f051d2e..2c2ff5f0fdb 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -185,6 +185,11 @@ export const deDE: LocalizationResource = { year: 'Jahr', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Wenden Sie sich an Ihren Organisationsadministrator, um Berechtigungen zur Verwaltung von Enterprise-Verbindungen zu erhalten.', + title: 'Sie haben keine Berechtigung, Enterprise-Verbindungen zu verwalten', + }, navbar: { title: 'Single Sign-On (SSO) konfigurieren', }, diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 9147179a512..ad532677f9f 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -179,6 +179,11 @@ export const elGR: LocalizationResource = { year: 'έτος', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Επικοινωνήστε με τον διαχειριστή του οργανισμού σας για να αποκτήσετε άδειες διαχείρισης εταιρικών συνδέσεων.', + title: 'Δεν έχετε άδεια διαχείρισης εταιρικών συνδέσεων', + }, navbar: { title: 'Διαμόρφωση Ενιαίας Σύνδεσης (SSO)', }, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index d529df0a938..5f21f029a6c 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -179,6 +179,11 @@ export const enGB: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contact your organisation administrator in order to have permissions to manage enterprise connections.', + title: 'You do not have permission to manage enterprise connections', + }, navbar: { title: 'Configure Single Sign-On (SSO)', }, diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 090841b697f..c99ba13395a 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -201,6 +201,11 @@ export const enUS: LocalizationResource = { yearPerUnit: 'Year per {{unitName}}', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contact your organization administrator in order to have permissions to manage enterprise connections.', + title: 'You do not have permission to manage enterprise connections', + }, navbar: { title: 'Configure Single Sign-On (SSO)', }, diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 8b1028c51f1..a96ef5b91d5 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -179,6 +179,11 @@ export const esCR: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contacta al administrador de tu organización para obtener permisos para gestionar conexiones de empresa.', + title: 'No tenés permiso para gestionar conexiones de empresa', + }, navbar: { title: 'Configurar inicio de sesión único (SSO)', }, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 6e0736e7078..0985e81031f 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -185,6 +185,11 @@ export const esES: LocalizationResource = { year: 'Año', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contacte al administrador de su organización para obtener permisos para gestionar conexiones empresariales.', + title: 'No tiene permiso para gestionar conexiones empresariales', + }, navbar: { title: 'Configurar inicio de sesión único (SSO)', }, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 12a91d526e5..a3bc81d7bb7 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -180,6 +180,11 @@ export const esMX: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contacta al administrador de tu organización para obtener permisos para administrar conexiones de empresa.', + title: 'No tienes permiso para administrar conexiones de empresa', + }, navbar: { title: 'Configurar inicio de sesión único (SSO)', }, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index dc9a5f1fac2..557ceb5ca23 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -179,6 +179,11 @@ export const esUY: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contactá al administrador de tu organización para obtener permisos para gestionar conexiones empresariales.', + title: 'No tenés permiso para gestionar conexiones empresariales', + }, navbar: { title: 'Configurar inicio de sesión único (SSO)', }, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 1389120f971..0bd64d2c2f0 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -184,6 +184,10 @@ export const faIR: LocalizationResource = { year: 'سال', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'برای دریافت مجوز مدیریت اتصالات سازمانی با مدیر سازمان خود تماس بگیرید.', + title: 'شما اجازه مدیریت اتصالات سازمانی را ندارید', + }, navbar: { title: 'پیکربندی ورود یکپارچه (SSO)', }, diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index d835761ecbc..46317d84fac 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -207,6 +207,10 @@ export const fiFI: LocalizationResource = { yearPerUnit: 'Vuosi per {{unitName}}', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Ota yhteyttä organisaatiosi järjestelmänvalvojaan saadaksesi oikeudet hallita yritysyhteyksiä.', + title: 'Sinulla ei ole oikeutta hallita yritysyhteyksiä', + }, navbar: { title: 'Määritä kertakirjautuminen (SSO)', }, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 9f7fdfaee50..97d225f024a 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -187,6 +187,11 @@ export const frFR: LocalizationResource = { year: 'An', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + "Contactez l'administrateur de votre organisation afin d'obtenir les permissions pour gérer les connexions d'entreprise.", + title: "Vous n'avez pas la permission de gérer les connexions d'entreprise", + }, navbar: { title: "Configurer l'authentification unique (SSO)", }, diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 6771d4daf90..b5510e08b09 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -179,6 +179,10 @@ export const heIL: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'פנה למנהל הארגון שלך כדי לקבל הרשאות לניהול חיבורים ארגוניים.', + title: 'אין לך הרשאה לנהל חיבורים ארגוניים', + }, navbar: { title: 'הגדרת כניסה אחידה (SSO)', }, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 29651d6cbd3..64ce08e7a27 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -179,6 +179,11 @@ export const hiIN: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'एंटरप्राइज़ कनेक्शन प्रबंधित करने की अनुमति प्राप्त करने के लिए अपने संगठन के व्यवस्थापक से संपर्क करें।', + title: 'आपके पास एंटरप्राइज़ कनेक्शन प्रबंधित करने की अनुमति नहीं है', + }, navbar: { title: 'सिंगल साइन-ऑन (SSO) कॉन्फ़िगर करें', }, diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 1af45a26c6e..32f5b1dee3b 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -208,6 +208,11 @@ export const hrHR: LocalizationResource = { yearPerUnit: 'Godina po {{unitName}}', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Obratite se administratoru vaše organizacije kako biste dobili dopuštenja za upravljanje poslovnim vezama.', + title: 'Nemate dopuštenje za upravljanje poslovnim vezama', + }, navbar: { title: 'Konfiguriraj jedinstvenu prijavu (SSO)', }, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 8ba7b812c75..2fcc3f83bf0 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -208,6 +208,11 @@ export const huHU: LocalizationResource = { yearPerUnit: 'Év / {{unitName}}', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Vegye fel a kapcsolatot szervezete adminisztrátorával, hogy jogosultságot kapjon a vállalati kapcsolatok kezelésére.', + title: 'Nincs jogosultsága vállalati kapcsolatok kezelésére', + }, navbar: { title: 'Egyszeri bejelentkezés (SSO) beállítása', }, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 0b9880267ad..bd47bf1828e 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -179,6 +179,10 @@ export const idID: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Hubungi administrator organisasi Anda untuk mendapatkan izin mengelola koneksi enterprise.', + title: 'Anda tidak memiliki izin untuk mengelola koneksi enterprise', + }, navbar: { title: 'Konfigurasi Single Sign-On (SSO)', }, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index e32720033ca..a6346dce68d 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -207,6 +207,11 @@ export const isIS: LocalizationResource = { yearPerUnit: 'Ár á {{unitName}}', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Hafðu samband við stjórnanda fyrirtækisins þíns til að fá heimildir til að stjórna fyrirtækjatengingum.', + title: 'Þú hefur ekki heimild til að stjórna fyrirtækjatengingum', + }, navbar: { title: 'Stilla einnar innskráningar (SSO)', }, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 93ee04f749c..f5042de6356 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -185,6 +185,11 @@ export const itIT: LocalizationResource = { year: 'Anno', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + "Contatta l'amministratore della tua organizzazione per ottenere i permessi per gestire le connessioni aziendali.", + title: 'Non hai il permesso di gestire le connessioni aziendali', + }, navbar: { title: 'Configura Single Sign-On (SSO)', }, diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index a9f62ce514f..3deb569032b 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -190,6 +190,10 @@ export const jaJP: LocalizationResource = { year: '年', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'エンタープライズ接続を管理する権限を取得するには、組織の管理者にお問い合わせください。', + title: 'エンタープライズ接続を管理する権限がありません', + }, navbar: { title: 'シングルサインオン(SSO)を設定', }, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 1c7c752c36a..f53f6a36f42 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -179,6 +179,10 @@ export const kkKZ: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Корпоративтік қосылыстарды басқару рұқсаттарын алу үшін ұйым әкімшісіне хабарласыңыз.', + title: 'Сізде корпоративтік қосылыстарды басқаруға рұқсат жоқ', + }, navbar: { title: 'Бірыңғай кіруді конфигурациялау (SSO)', }, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 67180a3c1da..1fa3e1e370b 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -186,6 +186,10 @@ export const koKR: LocalizationResource = { year: '년', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: '엔터프라이즈 연결을 관리할 권한을 얻으려면 조직 관리자에게 문의하세요.', + title: '엔터프라이즈 연결을 관리할 권한이 없습니다', + }, navbar: { title: '싱글 사인온(SSO) 구성', }, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 4ccdebd039d..198e7d1fd28 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -179,6 +179,10 @@ export const mnMN: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Аж ахуйн нэгжийн холболтыг удирдах эрх авахын тулд байгууллагынхаа админтай холбогдоно уу.', + title: 'Танд аж ахуйн нэгжийн холболтыг удирдах эрх байхгүй байна', + }, navbar: { title: 'Нэгдсэн нэвтрэлт (SSO) тохируулах', }, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 0e8da7e7832..be7b1af309e 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -179,6 +179,10 @@ export const msMY: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Hubungi pentadbir organisasi anda untuk mendapatkan kebenaran mengurus sambungan perusahaan.', + title: 'Anda tidak mempunyai kebenaran untuk mengurus sambungan perusahaan', + }, navbar: { title: 'Konfigurasi Log Masuk Tunggal (SSO)', }, diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index b063903b209..bcb8abaf78b 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -208,6 +208,10 @@ export const nbNO: LocalizationResource = { yearPerUnit: 'År per {{unitName}}', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Kontakt organisasjonens administrator for å få tillatelser til å administrere bedriftstilkoblinger.', + title: 'Du har ikke tillatelse til å administrere bedriftstilkoblinger', + }, navbar: { title: 'Konfigurer enkeltpålogging (SSO)', }, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 10df71a968a..3131fcd5baa 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -179,6 +179,11 @@ export const nlBE: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Neem contact op met de beheerder van uw organisatie om toestemming te krijgen voor het beheren van enterprise-verbindingen.', + title: 'U hebt geen toestemming om enterprise-verbindingen te beheren', + }, navbar: { title: 'Single sign-on (SSO) configureren', }, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 128189d82db..ce89575b35d 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -179,6 +179,11 @@ export const nlNL: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Neem contact op met de beheerder van je organisatie om toestemming te krijgen voor het beheren van enterprise-verbindingen.', + title: 'Je hebt geen toestemming om enterprise-verbindingen te beheren', + }, navbar: { title: 'Single sign-on (SSO) configureren', }, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index d87215cc89a..e5227729e6f 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -179,6 +179,11 @@ export const plPL: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Skontaktuj się z administratorem swojej organizacji, aby uzyskać uprawnienia do zarządzania połączeniami korporacyjnymi.', + title: 'Nie masz uprawnień do zarządzania połączeniami korporacyjnymi', + }, navbar: { title: 'Skonfiguruj logowanie jednokrotne (SSO)', }, diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 604fde40ec2..108c4f29d9f 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -185,6 +185,11 @@ export const ptBR: LocalizationResource = { year: 'Ano', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Entre em contato com o administrador da sua organização para obter permissões para gerenciar conexões empresariais.', + title: 'Você não tem permissão para gerenciar conexões empresariais', + }, navbar: { title: 'Configurar logon único (SSO)', }, diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 76519707741..adf07011b44 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -187,6 +187,10 @@ export const ptPT: LocalizationResource = { year: 'Ano', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Contacte o administrador da sua organização para obter permissões para gerir ligações empresariais.', + title: 'Não tem permissão para gerir ligações empresariais', + }, navbar: { title: 'Configurar autenticação única (SSO)', }, diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index c54f0159634..9008441998f 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -185,6 +185,11 @@ export const roRO: LocalizationResource = { year: 'An', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Contactați administratorul organizației dumneavoastră pentru a obține permisiuni de gestionare a conexiunilor de întreprindere.', + title: 'Nu aveți permisiunea să gestionați conexiunile de întreprindere', + }, navbar: { title: 'Configurați autentificarea unică (SSO)', }, diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 439dbabad3f..baafba1fdab 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -179,6 +179,11 @@ export const ruRU: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Обратитесь к администратору вашей организации, чтобы получить разрешения на управление корпоративными подключениями.', + title: 'У вас нет разрешения на управление корпоративными подключениями', + }, navbar: { title: 'Настроить единый вход (SSO)', }, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 6d141338a80..a74f99a230c 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -179,6 +179,11 @@ export const skSK: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Kontaktujte správcu vašej organizácie, aby ste získali oprávnenia na spravovanie podnikových pripojení.', + title: 'Nemáte oprávnenie spravovať podnikové pripojenia', + }, navbar: { title: 'Nastaviť jednotné prihlasovanie (SSO)', }, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 5edc8c961d6..1c40e71dd13 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -179,6 +179,11 @@ export const srRS: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Kontaktirajte administratora vaše organizacije da biste dobili dozvole za upravljanje korporativnim vezama.', + title: 'Nemate dozvolu za upravljanje korporativnim vezama', + }, navbar: { title: 'Konfiguriši jedinstvenu prijavu (SSO)', }, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index fb3d7b2d18a..fe20fe42180 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -179,6 +179,10 @@ export const svSE: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Kontakta administratören för din organisation för att få behörighet att hantera företagsanslutningar.', + title: 'Du har inte behörighet att hantera företagsanslutningar', + }, navbar: { title: 'Konfigurera enkel inloggning (SSO)', }, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 77fa6116a45..33d46b0155a 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -179,6 +179,10 @@ export const taIN: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'நிறுவன இணைப்புகளை நிர்வகிக்க அனுமதிகளைப் பெற உங்கள் நிறுவனத்தின் நிர்வாகியைத் தொடர்பு கொள்ளவும்.', + title: 'நிறுவன இணைப்புகளை நிர்வகிக்க உங்களுக்கு அனுமதி இல்லை', + }, navbar: { title: 'ஒற்றை உள்நுழைவை (SSO) உள்ளமை', }, diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index a019b92757a..a70186c3873 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -179,6 +179,10 @@ export const teIN: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'ఎంటర్‌ప్రైజ్ కనెక్షన్‌లను నిర్వహించడానికి అనుమతులు పొందడానికి మీ సంస్థ నిర్వాహకుడిని సంప్రదించండి.', + title: 'ఎంటర్‌ప్రైజ్ కనెక్షన్‌లను నిర్వహించడానికి మీకు అనుమతి లేదు', + }, navbar: { title: 'సింగిల్ సైన్-ఆన్ (SSO) కాన్ఫిగర్ చేయండి', }, diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index d8c8264b878..98926b01cb4 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -183,6 +183,10 @@ export const thTH: LocalizationResource = { year: 'ปี', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'ติดต่อผู้ดูแลระบบขององค์กรของคุณเพื่อขอสิทธิ์ในการจัดการการเชื่อมต่อระดับองค์กร', + title: 'คุณไม่มีสิทธิ์จัดการการเชื่อมต่อระดับองค์กร', + }, navbar: { title: 'กำหนดค่าการลงชื่อเข้าใช้แบบครั้งเดียว (SSO)', }, diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index cfddf9e7a04..f9ec3b6f23c 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -179,6 +179,10 @@ export const trTR: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Kurumsal bağlantıları yönetme izinleri almak için organizasyonunuzun yöneticisiyle iletişime geçin.', + title: 'Kurumsal bağlantıları yönetme izniniz yok', + }, navbar: { title: 'Tek Oturum Açmayı (SSO) Yapılandır', }, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index d1f62de46c8..4a13fb2776e 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -179,6 +179,11 @@ export const ukUA: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: + 'Зверніться до адміністратора вашої організації, щоб отримати дозвіл на керування корпоративними підключеннями.', + title: 'У вас немає дозволу на керування корпоративними підключеннями', + }, navbar: { title: 'Налаштувати єдиний вхід (SSO)', }, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 411ca53019b..6bedf43ee58 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -183,6 +183,10 @@ export const viVN: LocalizationResource = { year: 'Năm', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: 'Liên hệ với quản trị viên tổ chức của bạn để có quyền quản lý các kết nối doanh nghiệp.', + title: 'Bạn không có quyền quản lý các kết nối doanh nghiệp', + }, navbar: { title: 'Cấu hình đăng nhập một lần (SSO)', }, diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 8835fdfc716..f70f9fe53d6 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -179,6 +179,10 @@ export const zhCN: LocalizationResource = { year: undefined, }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: '请联系您的组织管理员以获得管理企业连接的权限。', + title: '您无权管理企业连接', + }, navbar: { title: '配置单点登录 (SSO)', }, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 5bd804bfe98..3cdb738b844 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -185,6 +185,10 @@ export const zhTW: LocalizationResource = { year: '年', }, configureSSO: { + missingManageEnterpriseConnectionsPermission: { + subtitle: '請聯絡您的組織管理員以取得管理企業連線的權限。', + title: '您沒有管理企業連線的權限', + }, navbar: { title: '設定單一登入 (SSO)', }, diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 49ce96a0616..b7479311b84 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1296,6 +1296,10 @@ export type __internal_LocalizationResource = { navbar: { title: LocalizationValue; }; + missingManageEnterpriseConnectionsPermission: { + title: LocalizationValue; + subtitle: LocalizationValue; + }; }; apiKeys: { formTitle: LocalizationValue; diff --git a/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx b/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx index b76cdbca898..747064c1f02 100644 --- a/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx +++ b/packages/ui/src/components/ConfigureSSO/ConfigureSSO.tsx @@ -2,9 +2,9 @@ import { __internal_useUserEnterpriseConnections, useSession } from '@clerk/shar import type { __experimental_ConfigureSSOProps } from '@clerk/shared/types'; import React from 'react'; -import { Protect } from '@/common'; +import { useProtect } from '@/common'; import { withCoreUserGuard } from '@/contexts'; -import { Col, descriptors, Flex, Flow, Heading, Icon, Text } from '@/customizables'; +import { Col, descriptors, Flex, Flow, Heading, Icon, localizationKeys, Text } from '@/customizables'; import { withCardStateProvider } from '@/elements/contexts'; import { ProfileCard } from '@/elements/ProfileCard'; import { ExclamationTriangle } from '@/icons'; @@ -61,60 +61,61 @@ const AuthenticatedContent = withCoreUserGuard(() => { const ConfigureSSOCardContent = () => { const { data: enterpriseConnections, isLoading } = __internal_useUserEnterpriseConnections({ enabled: true }); + // Currently FAPI only supports one enterprise connection per user const enterpriseConnection = enterpriseConnections?.[0]; const { session } = useSession(); - // Initial-load gate at root — wizard never sees isLoading + const isPersonalWorkspace = !session?.lastActiveOrganizationId; + const hasManageEnterpriseConnectionsPermission = useProtect( + has => isPersonalWorkspace || has({ permission: 'org:sys_enterprise_connections:manage' }), + ); + + if (!hasManageEnterpriseConnectionsPermission) { + return ; + } + if (isLoading && !enterpriseConnection) { return ; } - const isPersonalWorkspace = !session?.lastActiveOrganizationId; - return ( - !isPersonalWorkspace && has({ permission: 'org:sys_enterprise_connections:manage' })} - fallback={} - > - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + ); }; @@ -134,18 +135,16 @@ const MissingManageEnterpriseConnectionsOrganizationPermission = () => ( sx={t => ({ width: t.sizes.$8, height: t.sizes.$8, color: t.colors.$neutralAlpha600 })} /> ({ fontSize: t.fontSizes.$lg })} - > - You do not have permission to manage enterprise connections - + /> - Contact your organization administrator in order to have permissions to manage enterprise connections. - + localizationKey={localizationKeys('configureSSO.missingManageEnterpriseConnectionsPermission.subtitle')} + /> ); From 8592a4588457adacc62ffa0610988f1384ab9f90 Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Fri, 8 May 2026 16:28:31 -0300 Subject: [PATCH 3/4] Add changeset --- .changeset/legal-numbers-fry.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/legal-numbers-fry.md diff --git a/.changeset/legal-numbers-fry.md b/.changeset/legal-numbers-fry.md new file mode 100644 index 00000000000..e79843b067c --- /dev/null +++ b/.changeset/legal-numbers-fry.md @@ -0,0 +1,8 @@ +--- +'@clerk/localizations': patch +'@clerk/clerk-js': patch +'@clerk/shared': patch +'@clerk/ui': patch +--- + +Update `` in the context of organizations to only allow managing enterprise connections based on system permission From aac0891ea9fa858db2e9f4198a8e28a190b0b84e Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Fri, 8 May 2026 16:57:36 -0300 Subject: [PATCH 4/4] Add UI tests --- .../__tests__/ConfigureSSO.test.tsx | 70 +++++++++++++++++++ packages/ui/src/test/fixture-helpers.ts | 4 +- 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx diff --git a/packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx b/packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx new file mode 100644 index 00000000000..b1c3e2089a6 --- /dev/null +++ b/packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx @@ -0,0 +1,70 @@ +import { describe, expect, it } from 'vitest'; + +import { bindCreateFixtures } from '@/test/create-fixtures'; +import { render, waitFor } from '@/test/utils'; + +import { ConfigureSSO } from '../ConfigureSSO'; + +const { createFixtures } = bindCreateFixtures('ConfigureSSO'); + +describe('ConfigureSSO', () => { + describe('within an organization', () => { + it('shows a warning if the active organization membership lacks the manage enterprise connections permission', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withEnterpriseSso({ selfServeSso: true }); + f.withEmailAddress(); + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', permissions: [] }], + }); + }); + + fixtures.clerk.user?.getEnterpriseConnections.mockResolvedValue([]); + + const { findByText, queryByText } = render(, { wrapper }); + + await findByText(/you do not have permission to manage enterprise connections/i); + expect(queryByText(/contact your organization administrator in order to have permissions/i)).toBeInTheDocument(); + expect(queryByText(/select provider/i)).not.toBeInTheDocument(); + }); + + it('renders the wizard when the active organization membership has the manage enterprise connections permission', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withEnterpriseSso({ selfServeSso: true }); + f.withEmailAddress(); + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', permissions: ['org:sys_enterprise_connections:manage'] }], + }); + }); + + fixtures.clerk.user?.getEnterpriseConnections.mockResolvedValue([]); + + const { findByText, queryByText } = render(, { wrapper }); + + await waitFor(() => { + expect(queryByText(/you do not have permission to manage enterprise connections/i)).not.toBeInTheDocument(); + }); + await findByText(/select provider/i); + }); + }); + + describe('in a personal workspace', () => { + it('renders the wizard without checking the manage enterprise connections permission', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withEnterpriseSso({ selfServeSso: true }); + f.withEmailAddress(); + f.withUser({ email_addresses: ['test@clerk.com'] }); + }); + + fixtures.clerk.user?.getEnterpriseConnections.mockResolvedValue([]); + + const { findByText, queryByText } = render(, { wrapper }); + + await findByText(/select provider/i); + expect(queryByText(/you do not have permission to manage enterprise connections/i)).not.toBeInTheDocument(); + }); + }); +}); diff --git a/packages/ui/src/test/fixture-helpers.ts b/packages/ui/src/test/fixture-helpers.ts index 460117de14a..79f22936c2c 100644 --- a/packages/ui/src/test/fixture-helpers.ts +++ b/packages/ui/src/test/fixture-helpers.ts @@ -538,9 +538,9 @@ const createUserSettingsFixtureHelpers = (environment: EnvironmentJSON) => { }; }; - const withEnterpriseSso = () => { + const withEnterpriseSso = (opts?: { selfServeSso?: boolean }) => { us.saml = { enabled: true }; - us.enterprise_sso = { enabled: true }; + us.enterprise_sso = { enabled: true, self_serve_sso: opts?.selfServeSso ?? false }; }; const withBackupCode = (opts?: Partial) => {