@@ -85,6 +85,12 @@ organization is non-isolated, or isolated, before enforcing organization boundar
See [ADR 008: Non-isolated organizations on GitLab.com](decisions/008_non_isolated_organizations_gitlab_com.md)
for full details.
## Request Context
Every request, job, and task resolves to one of three contexts:
Organization context, User context, or Nil context. Isolation is the
only thing that changes which one applies. See [Request Context](contexts.md) for the full model, and [ADR 016: `organization_id` and Organization-scoped query filtering](decisions/016_user_context.md) for how it is encoded today.
## Impact of the Organization on Other Domains
Here is a growing list of pages that describe in more detail how
@@ -95,6 +101,7 @@ Organization affects other parts of the system.
-[Settings](settings.md)
-[Lifecycle](lifecycle.md)
-[Users](users.md)
-[Request Context](contexts.md)
-[Login](login.md)
-[OAuth - GitLab as SP](oauth_client_auth.md)
@@ -275,7 +282,8 @@ target. In some cases we have intentionally restricted the problem scope and int
- Organizations can be public or private.
- The Default Organization is public.
- Requests made to non-Organization specific endpoints such as `/explore` will
default to the default organization.
default to the default organization. Whether such endpoints should instead
resolve to Nil context is an open, per-route decision — see [Request Context](contexts.md).
- Public Organizations can be seen by everyone. They can contain public and private Groups and Projects.
- Private Organizations can only be seen by the Users that are part of the Organization. They can only contain private or internal Groups and Projects.
-**Users**
@@ -283,7 +291,7 @@ target. In some cases we have intentionally restricted the problem scope and int
- The creation of an Organization appoints the creating User as the Organization Administrator.
- Organization Administrators can update the existing user type of a user from Regular User to Administrator or vice versa.
- There must be at least one Organization Administrator per Organization.
- A User can only be part of one Organization. A new account needs to be created for each Organization a User wants to be part of.
- A User can be part of multiple non-isolated Organizations with the same account. Once a User's identity is owned by an isolated Organization, they belong to that Organization only. See [Request Context](contexts.md).
- Organization Administrators can delete users within their own Organization.
- When a user becomes a member of a group or project they are also added as an Organization user. They receive an email informing them that they have been added to the Organization.
- Removing a user from their last group or project should not remove them from the Organization.
@@ -353,6 +361,7 @@ Based on this analysis we expect to see similar behavior when rolling out Organi
-[013: Warn when creating a Top-Level-Group inside an organization](decisions/013_warn_on_tlg_creation.md)
-[014: Organization roles renamed to Organization user types](decisions/014_organization_roles_renamed_to_organization_user_type.md)
-[015: Non-isolation is a permanent Organization state](decisions/015_non_isolation_is_permanent.md)
-[016: `organization_id` and Organization-scoped query filtering](decisions/016_user_context.md)
@@ -15,9 +15,15 @@ For web requests the current organization will be determined in the following or
1. Path params. E.g. `/o/my-org/my-group`, `/my-group/my-project`
1. Header field (`X-GitLab-Organization-ID`)
1. Users Home Organization (`user.organization`)
1. Users Home Organization (`user.organization_id`).
1. The default organization (ID = 1).
This precedence resolves Organization context. **User context** and
**Nil context** are separate, independent contexts — see [Request Context](contexts.md) — and a route can resolve to either of them
instead of falling back to the Default Organization. Which routes should
do that is an explicit, per-route decision not yet made; this page does
not resolve it.
### Path Params
The current Organization will be the parent Organization for the resource requested.
@@ -39,7 +45,7 @@ For example:
### Users Home Organization
Every user belongs to one Organization. This organization is known as the Home Organization.
A User's Home Organization (`organization_id`) always points at exactly one Organization — ownership is always exclusive. Whether membership is exclusive to that Organization too depends on whether it is isolated. See [The User's Home Organization](users.md#the-users-home-organization).
Used as a fallback for any ambiguous authenticated request.
@@ -23,9 +23,9 @@ Our goal is to minimize disruption to Self Managed and Dedicated while we try to
In the longer term, we anticipate faster feature development by having Organizations as a common top level entity across all platforms.
## Can a user belong to multiple Organizations?
## Can a user be a member of multiple Organizations?
Currently, our model is designed for one user to belong to one Organization. This restriction was implemented because allowing users to belong to multiple Organizations created significant technical challenges and raised many product questions. We expect usage of multiple Organization membership to be relatively low, so this limitation will likely remain for the foreseeable future.
Yes, as long as those Organizations are non-isolated. Ownership (`organization_id`) always points at exactly one Organization, but membership is only exclusive to that Organization once it isolates (see [The User's Home Organization](users.md#the-users-home-organization)); before that, the same account can be a member of any number of non-isolated Organizations. See [Request Context](contexts.md) for the full model. Membership in a single isolated Organization is the long-term goal once isolation ships for a given Organization.
## Do we expect to be able to configure alternate GitLab domain names for Organizations (such as `customer.gitlab.com`)?