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
Three read-only auditors (IdP compatibility and docs, correctness and
regressions, code economy and tests) reviewed the merged branch. Every
verified finding is addressed here.
Sync-breaking and regressions:
- Accept provider extension URNs in `schemas` (Okta custom attributes,
Entra custom extensions) and echo them on the resource; the check now
lives in the write contracts.
- A lapsed enterprise plan no longer keeps refusing manual membership
changes, invitations, or SSO JIT on a directory's behalf.
- Leaving a workspace no longer signs the leaver out (session spared).
- OAuth access and refresh tokens are refused for a directory-suspended
account, like sessions and personal keys.
- Workspace-role changes for a directory-managed member are refused under
membership locking, as the docs already said.
- A permission group moved back to governing everyone no longer fails a
sync with a 500; the grant is left on record and logged.
- The explicit-membership flip after auto-mapping now happens after the
projection, keeping the permission-group lock a leaf.
- Request-log prune runs before each pass, so a failing pass still bounds
the log; contract-validation failures now carry scimType and detail in
the activity log; `application/scim+json; charset=utf-8`.
Economy: shared helpers replace local copies (postgres error code, SHA-256
base64url, bearer parsing, email syntax, batch reconcile loop); unreachable
defensive checks behind the contracts removed; half-applied base-URL
injection removed from the route builder; casts, restating comments, and
unused exports dropped.
Docs: withdrawal semantics under locking stated precisely; SCIM env vars
added to the self-hosted, SSO, and environment-variable references; group
name uniqueness noted.
Tests: extension URN acceptance and echo, managed-membership guard and its
entitlement bypass, directory-only SSO admission, OAuth suspension,
permissions-route guard, settle step ordering, and the weak assertions
the audit flagged strengthened.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DGXcwsHzYGp6pUDWRtJKpz
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/scim.mdx
+6-3Lines changed: 6 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -133,9 +133,11 @@ Mapping a permission group to a directory group switches that permission group t
133
133
134
134
## How access is withdrawn
135
135
136
-
Sim records every grant it makes on your behalf. When someone leaves a group, only what the directory granted is taken back — access a workspace administrator granted by hand stays.
136
+
Sim records every grant it makes on your behalf. When someone leaves a group, what the directory granted is taken back.
137
137
138
-
The one exception is **managed membership locking**, which is on by default. With it on, the directory is the source of truth: Sim refuses invitations, workspace grants, and role changes for provisioned members, because the next sync would revert them anyway. Removals stay possible so an administrator can always act in an emergency. Turn it off if you want to layer manual access on top of directory access.
138
+
**Managed membership locking**, on by default, makes the directory the source of truth for provisioned members: Sim refuses invitations, workspace grants, workspace role changes, and organization role changes for them, because the next sync would revert them anyway. Access a member already held by hand when a mapping started covering it counts as directory access from then on, so it is withdrawn with the mapping. Removals stay possible so an administrator can always act in an emergency.
139
+
140
+
With locking off, manual access layers on top of directory access: access granted by hand stays when a group is left, and a workspace role raised by hand above what the directory set is left alone.
139
141
140
142
## Provisioning and SSO together
141
143
@@ -156,7 +158,8 @@ Sim also re-applies every group mapping once an hour, so drift cannot persist. Y
156
158
- Resources: `/Users`, `/Groups`, plus `/ServiceProviderConfig`, `/ResourceTypes`, and `/Schemas`
157
159
- Filters: `eq` only, up to ten terms joined with `and`. Users: `id`, `userName`, `externalId`, `emails.value` (also `emails[type eq "work"].value`), `active`. Groups: `id`, `displayName`, `externalId`
158
160
- Limits: 1,500 requests per minute per connection, 1 MB per request, 5,000 members per group
159
-
-`userName` is stored and returned lower-cased; attributes Sim does not model are kept and returned as sent, and a PUT preserves ones it omits
161
+
-`userName` is stored and returned lower-cased; top-level attributes and schema extensions Sim does not model (custom attributes included) are kept and returned as sent, and a PUT preserves ones it omits
162
+
- Group display names are unique within a connection, ignoring case
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/self-hosting/environment-variables.mdx
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -251,6 +251,7 @@ Enterprise features are unlocked by configuration rather than billing on self-ho
251
251
|----------|-------------|
252
252
|`ENTERPRISE_ENABLED`, `NEXT_PUBLIC_ENTERPRISE_ENABLED`| Enable the whole enterprise feature set |
253
253
|`SSO_ENABLED`, `NEXT_PUBLIC_SSO_ENABLED`| Enable SAML and OIDC single sign-on on its own. See [Authentication](/platform/self-hosting/authentication#sso-saml-and-oidc)|
254
+
|`SCIM_ENABLED`, `NEXT_PUBLIC_SCIM_ENABLED`| Enable directory provisioning on its own. Needs SSO. See [Directory provisioning](/platform/enterprise/scim)|
254
255
|`INSTANCE_ORG_NAME`| Name of the organization every user joins automatically at signup |
255
256
|`INSTANCE_ORG_SLUG`| Slug for that organization (derived from the name when omitted) |
256
257
|`INSTANCE_ORG_OWNER_EMAIL`| Owner of that organization (defaults to the first user to sign up) |
0 commit comments