diff --git a/.gitignore b/.gitignore index abe504f86..6d6df7e37 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ next-env.d.ts # tooling /template +.env* diff --git a/src/core/modules/auth/models.ts b/src/core/modules/auth/models.ts index 70d5ca88f..de46a462b 100644 --- a/src/core/modules/auth/models.ts +++ b/src/core/modules/auth/models.ts @@ -9,4 +9,7 @@ export type AuthUser = { providers: string[] canChangeEmail: boolean canChangePassword: boolean + // Ory organization id when the identity signed in via org SSO, else null. + organizationId: string | null + isSso: boolean } diff --git a/src/core/server/auth/ory/identity.ts b/src/core/server/auth/ory/identity.ts index a724db90e..9248a4d07 100644 --- a/src/core/server/auth/ory/identity.ts +++ b/src/core/server/auth/ory/identity.ts @@ -71,11 +71,14 @@ export function fromKratosSessionIdentity(identity: { external_id?: string | null traits?: unknown metadata_public?: unknown + organization_id?: string | null }): AuthUser { const traits = parseOryTraits(identity.traits, { identityId: identity.id, source: 'kratos_session', }) + const organizationId = identity.organization_id || null + return { id: requireExternalId(identity), identityId: identity.id, @@ -85,6 +88,8 @@ export function fromKratosSessionIdentity(identity: { providers: [], canChangeEmail: false, canChangePassword: false, + organizationId, + isSso: organizationId !== null, } } @@ -105,6 +110,7 @@ export function fromOryIdentity(identity: Identity): AuthUser { ) const hasOidcCredential = hasLinkedOidcCredential(identity.credentials?.oidc) const canChangePassword = hasPasswordCredential && !hasOidcCredential + const organizationId = identity.organization_id || null return { id: requireExternalId(identity), @@ -117,6 +123,8 @@ export function fromOryIdentity(identity: Identity): AuthUser { // settings/verification flows instead of patching traits directly. canChangeEmail: false, canChangePassword, + organizationId, + isSso: organizationId !== null, } } diff --git a/src/features/dashboard/sidebar/menu.tsx b/src/features/dashboard/sidebar/menu.tsx index 5e97d2e44..22f0941f4 100644 --- a/src/features/dashboard/sidebar/menu.tsx +++ b/src/features/dashboard/sidebar/menu.tsx @@ -31,7 +31,7 @@ import DashboardSidebarMenuTeams from './menu-teams' import { TeamAvatar } from './team-avatar' export default function DashboardSidebarMenu() { - const { team } = useDashboard() + const { team, user } = useDashboard() const { enabled: postHogEnabled } = useAppPostHogProvider() const posthog = usePostHog() const [createTeamOpen, setCreateTeamOpen] = useState(false) @@ -83,12 +83,14 @@ export default function DashboardSidebarMenu() { > - setCreateTeamOpen(true)} - > - Create new team - + {!user.isSso && ( + setCreateTeamOpen(true)} + > + Create new team + + )}