You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
plugin-auth, setup users: a managed (SSO-only) hosted environment keeps only authorization + view in Setup → Users, turns its local sign-up off, and gives a JIT user the declared default permission set (cloud#3132 ruling A) #25083
Filed by the director seat (summon #43 continuation 5, session_01QJC7i981TSs9L1CGJK59Ax) as the objectstack half of the maintainer's ruling on objectstack-ai/cloud#3132 (2026-10-21, 「云端环境就是受管模式,自托管模式不影响」): hosted environments are managed — every account the organisation invites lives in the cloud, authorization stays in the environment; self-hosted deployments are unchanged. ⛔ Not a claim.
Why
ADR-0024 D5.2 (cloud): under SSO the environment's local user management for the managed population 「narrows to authorization + view」; invite and password management belong to the organisation / IdP. The runtime already has ssoOnlyMode (packages/plugins/plugin-auth/src/auth-manager.ts:7499–:7508, :7617–:7631: the password form and self-registration hidden), but Setup → Users still offers the full local surface (sys_invitation, local password management), and a just-in-time user created through the cloud IdP arrives with no declared default access.
What changes
Under ssoOnlyMode (or OS_AUTH_SSO_ONLY): Setup → Users lists users read-only (identity fields come from the IdP) and keeps only authorization: positions, permission sets, sharing-relevant fields; the local 「invite」 and password actions are not offered; one line says where to invite (the hosting organisation). The break-glass local admin stays editable (ADR-0024's invariant).
Default access for a JIT user: an environment declares the permission set a just-in-time user receives on first entry (one config key, read by the IdP JIT path); absent, the smallest read-only platform set. The seat proposes the exact set and its spelling on this card before dispatch; the maintainer may veto.
No local sign-up on a managed environment: under the managed mode the audience posture is invite_only and not configurable (an application cannot open self-registration in the environment; a future self-registration door, if ever wanted, is the cloud's, scoped to an environment, as its own card — the maintainer's word: 「在应用里自己注册的人…我的建议是这个也不要」).
Self-hosted deployments without an IdP are unaffected (the mode is off).
Acceptance
With ssoOnlyMode on: Setup → Users shows no invite or password action; the audience posture reads invite_only and the configuration door refuses open; positions and permission sets remain assignable; the break-glass admin remains editable; a JIT user holds the declared default set after first entry (pinned); with the mode off, nothing changes (pinned).
Docs: data-hooks.md-style context table not touched; the identity docs name the managed mode in one paragraph.
UI copy: the objectui half, if any, is filed by the claiming seat as a cross-repo card.
Ruling-pointer · the managed-mode switch · objectstack-ai/cloud#3132 ruling A (6311479286) and its 口径 (the maintainer's 「OS_CLOUD_MANAGED」 · 「features.cloud_managed」) · director seat (summon #43 continuation 5, session_01QJC7i981TSs9L1CGJK59Ax) · 2026-10-21T08:39Z
For the claiming seat: managed mode is OS_CLOUD_MANAGED=1 (set on the cloud's objectos containers; never on self-hosted images), read by one server accessor isManaged() that every judgement site in this card calls, and served to the console as features.cloud_managed beside features.sso. A production boot with the variable set but without the hosted composition (ObjectOSEnvironmentPlugin, core/src/stack-auth.tsisHostKernelComposition) and a reachable control plane refuses to start loudly; a --dev boot honours the variable alone. The per-environment row facts and OS_AUTH_SSO_ONLY are unchanged. This card's acceptance reads the mode through that accessor and that field, not through ssoOnlyMode alone.
Ruling-pointer · correction to 6311773273 (the maintainer: 「这种完整的名字比较精确,具体开发还是按照你的建议」) · director seat (summon #43 continuation 5, session_01QJC7i981TSs9L1CGJK59Ax) · 2026-10-21T08:40Z
For the claiming seat: in production isManaged() is derived from the hosted composition (ObjectOSEnvironmentPlugin, isHostKernelComposition) and the bound control plane, never from an environment variable; OS_CLOUD_MANAGED=1 is the development / test override only (--dev boots and test rigs), and a production boot refuses to start loudly if it is set; the console reads features.cloud_managed. The acceptance pins both: a --dev boot with the variable runs managed; a production composition without the plugin stays unmanaged whatever the variable says.
Activity
objectstack-fleet commentedon Oct 21, 2026
Ruling-pointer · the managed-mode switch · objectstack-ai/cloud#3132 ruling A (6311479286) and its 口径 (the maintainer's 「OS_CLOUD_MANAGED」 · 「features.cloud_managed」) · director seat (summon #43 continuation 5,
session_01QJC7i981TSs9L1CGJK59Ax) · 2026-10-21T08:39ZFor the claiming seat: managed mode is
OS_CLOUD_MANAGED=1(set on the cloud's objectos containers; never on self-hosted images), read by one server accessorisManaged()that every judgement site in this card calls, and served to the console asfeatures.cloud_managedbesidefeatures.sso. A production boot with the variable set but without the hosted composition (ObjectOSEnvironmentPlugin,core/src/stack-auth.tsisHostKernelComposition) and a reachable control plane refuses to start loudly; a--devboot honours the variable alone. The per-environment row facts andOS_AUTH_SSO_ONLYare unchanged. This card's acceptance reads the mode through that accessor and that field, not throughssoOnlyModealone.objectstack-fleet commentedon Oct 21, 2026
Ruling-pointer · correction to 6311773273 (the maintainer: 「这种完整的名字比较精确,具体开发还是按照你的建议」) · director seat (summon #43 continuation 5,
session_01QJC7i981TSs9L1CGJK59Ax) · 2026-10-21T08:40ZFor the claiming seat: in production
isManaged()is derived from the hosted composition (ObjectOSEnvironmentPlugin,isHostKernelComposition) and the bound control plane, never from an environment variable;OS_CLOUD_MANAGED=1is the development / test override only (--devboots and test rigs), and a production boot refuses to start loudly if it is set; the console readsfeatures.cloud_managed. The acceptance pins both: a--devboot with the variable runs managed; a production composition without the plugin stays unmanaged whatever the variable says.