Skip to content

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

Open

Description

@objectstack-fleet

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.

Activity

  1. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    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.ts isHostKernelComposition) 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.

  2. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsdomain:servicespm:blockedpriority:p1High: required for production / M2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions