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
***org-features** — rejects org endpoints when `org_features.enabled` is false
148
158
***groups-enabled** — rejects group endpoints when `org_features.groups_enabled` is false
149
159
***org-role-guard** — validates user context and org role for `/org/*` routes
160
+
***org-permission** (`requireOrgRole(minRole)`) — enforces org-level UOA role (`owner > admin > member`). Reads `OrgMember.role` for the authenticated user in the target org. Returns 403 if not a member or role is insufficient. Used on org management endpoints and admin panel org routes. See `api-changes-rebac.md §4`.
161
+
***team-permission** (`requireTeamRole(minRole)`) — enforces team-level UOA role with org-level fallback inheritance. Checks `TeamMember.role` first; if not a direct member, falls back to the user's `OrgMember.role` for the parent org. Returns 403 if neither check passes. See `api-changes-rebac.md §4`.
150
162
***error-handler** — catches all errors. Returns generic message to user. Logs specifics internally
Copy file name to clipboardExpand all lines: Docs/Requirements/feature-flags.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
## Status: confirmed, in scope
4
4
5
-
Both the feature flag service and the role flag matrix are **optional services**. Neither is mandatory for a consuming app that just needs identity and authentication. They are enabled or disabled per organisation in the UOA admin panel.
5
+
Both the feature flag service and the role flag matrix are **optional services**. Neither is mandatory for a consuming app that just needs identity and authentication. They are enabled or disabled **per App** via the `feature_flags_enabled` and `role_flag_matrix_enabled` fields on the App model (see `apps.md`). A system admin or org admin toggles these fields from the admin panel.
6
6
7
7
---
8
8
@@ -53,6 +53,8 @@ The global missing-flag default means consuming apps never get an error for an u
53
53
GET /apps/:appId/flags?userId=user_123[&teamId=team_xyz]
54
54
```
55
55
56
+
**Auth:** Domain-hash auth (consuming app calling server-side). The `userId` param must correspond to a real user in the calling app's org — the server validates this. When called from a client SDK context, use the `/apps/startup` endpoint instead (which accepts an `X-UOA-Access-Token` header and derives `userId` from it).
57
+
56
58
`teamId` is optional. When omitted and the user has a single team membership relevant to this App, that team's role is used. When the user has multiple team memberships, `teamId` must be provided or the multi-team fallback rule (see resolution order above) applies.
57
59
58
60
Returns the fully resolved flag map for that user in that App:
@@ -120,7 +122,7 @@ Example: a `viewer` who needs temporary `beta_access` gets a per-user override o
120
122
121
123
## Service enablement
122
124
123
-
Services are enabled per organisation. A system admin can toggle them from the admin panel. The consuming app does not need to change any code — if flags are not enabled, the query endpoint returns an empty object and the token contains no `flags` field.
125
+
Services are enabled **per App** (not per org). Two boolean fields on the App model control availability — `feature_flags_enabled` and `role_flag_matrix_enabled`. A system admin or org admin toggles these from the admin panel on a per-App basis. The consuming app does not need to change any code — if flags are not enabled, the query endpoint returns an empty object and the token contains no `flags` field.
Copy file name to clipboardExpand all lines: Docs/Requirements/roles-and-acl.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -287,6 +287,8 @@ SCIM endpoints are authenticated with the per-org SCIM bearer token (see above).
287
287
288
288
**SCIM authentication:**`Authorization: Bearer <token>` header (RFC 7523 standard). Missing or invalid token returns HTTP 401 with SCIM error schema. Token scope is validated against the org identified in the token hash lookup — requests targeting a different org's resources return HTTP 403.
289
289
290
+
**SCIM `GET /scim/v2/Users` pagination:** Uses SCIM standard `startIndex` (1-based, default 1) and `count` (page size, default 100, max 200) params. Supports `filter=userName eq "alice@acme.com"` and `filter=externalId eq "<idp-id>"` per RFC 7644 §3.4.2.2. Response includes `totalResults`, `startIndex`, `itemsPerPage`, and a `Resources` array of User objects.
291
+
290
292
**SCIM `GET /scim/v2/Groups` pagination:** Uses SCIM standard `startIndex` (1-based, default 1) and `count` (page size, default 100, max 200) params. Supports `filter=displayName eq "Engineering"` per RFC 7644 §3.4.2.2. Response includes `totalResults`, `startIndex`, `itemsPerPage`.
0 commit comments