Merged in jmathison/DEVOPS-722 (pull request #226)
DEVOPS-722 enforce team management visibility * DEVOPS-722 enforce team management visibility * DEVOPS-722 reduce admin user list complexity * DEVOPS-722 cover admin access helpers * DEVOPS-722 address team management PR feedback * DEVOPS-722 fix admin access tests in CI * DEVOPS-722 fix remaining admin PR feedback
This commit is contained in:
@@ -1280,6 +1280,8 @@ Creates a new user in both AWS Cognito and Permit.io systems with optional role
|
||||
|
||||
**Security**: Requires JWT authentication
|
||||
|
||||
**Team Management Permissions**: Super Admin can create any user. User Admin and Client Admin can create only non-AArete users with `client_user` and/or `user_admin` roles. Auditor is read-only and cannot create users.
|
||||
|
||||
**Environment Scoping**: When `COGNITO_ENVIRONMENT_ID` is configured on the server, newly created users are automatically tagged with the `custom:environment_id` attribute matching the server's value. This ensures users are scoped to the correct environment.
|
||||
|
||||
**Creation Flow**:
|
||||
@@ -1341,11 +1343,13 @@ Lists users from AWS Cognito with pagination, filtering, and sorting support.
|
||||
|
||||
**Environment Filtering**: When `COGNITO_ENVIRONMENT_ID` is configured, the response is filtered to include only users whose `custom:environment_id` matches the server's value or users with no environment tag (legacy/untagged users). Users belonging to other environments are excluded from the results.
|
||||
|
||||
**Team Management Visibility**: User Admin and Client Admin receive only non-AArete users that do not have `auditor` or `super_admin` roles. Super Admin and Auditor receive all environment-visible users. The `roles` field is populated from Permit.io for list responses.
|
||||
|
||||
**Query Parameters**:
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| page | integer | 1 | Page number (1-10000) |
|
||||
| page_size | integer | 50 | Results per page (1-100) |
|
||||
| page_size | integer | 50 | Results per page (1-60) |
|
||||
| search | string | - | Search term for email/name filtering |
|
||||
| status | string | all | Filter by status: `enabled`, `disabled`, `all` |
|
||||
| sort_by | string | email | Sort field: `email`, `created_at`, `last_name` |
|
||||
@@ -1383,6 +1387,8 @@ Retrieves user details from both AWS Cognito and Permit.io by email address.
|
||||
|
||||
**Environment Ownership**: When `COGNITO_ENVIRONMENT_ID` is configured, returns `404 Not Found` for users belonging to a different environment to prevent information leakage. Untagged users and users matching the server's environment are accessible.
|
||||
|
||||
**Team Management Visibility**: Hidden users return `404 Not Found` so User Admin and Client Admin callers cannot enumerate AArete, Auditor, or Super Admin users.
|
||||
|
||||
**Path Parameters**:
|
||||
|
||||
- `email`: URL-encoded user email address (max 320 chars)
|
||||
@@ -1397,6 +1403,8 @@ Checks if a user exists in Cognito and/or Permit.io without returning full detai
|
||||
|
||||
**Environment Ownership**: When `COGNITO_ENVIRONMENT_ID` is configured, returns `404` for users belonging to a different environment.
|
||||
|
||||
**Team Management Visibility**: Hidden users return `404 Not Found` so User Admin and Client Admin callers cannot enumerate AArete, Auditor, or Super Admin users.
|
||||
|
||||
**Response Headers**:
|
||||
|
||||
- `X-User-Exists-Cognito`: boolean
|
||||
@@ -1415,6 +1423,8 @@ Updates user attributes (first_name, last_name) in Cognito and manages role assi
|
||||
|
||||
**Environment Ownership**: When `COGNITO_ENVIRONMENT_ID` is configured, returns `404 Not Found` for users belonging to a different environment.
|
||||
|
||||
**Team Management Permissions**: Super Admin can update any environment-visible user. User Admin and Client Admin can update only non-AArete client-level users and can assign only `client_user` and `user_admin` roles. Auditor is read-only.
|
||||
|
||||
**Role Management (REPLACE Strategy)**:
|
||||
|
||||
- Providing a `roles` array REPLACES all existing roles (not additive)
|
||||
@@ -1443,6 +1453,8 @@ Permanently deletes a user from both AWS Cognito and Permit.io. This operation i
|
||||
|
||||
**Environment Ownership**: When `COGNITO_ENVIRONMENT_ID` is configured, returns `404 Not Found` for users belonging to a different environment.
|
||||
|
||||
**Team Management Permissions**: Super Admin can delete any environment-visible user. User Admin and Client Admin can delete only non-AArete client-level users. Auditor is read-only.
|
||||
|
||||
**Query Parameters**:
|
||||
|
||||
- `confirm` (required): Must be `true` to confirm deletion
|
||||
@@ -1470,6 +1482,8 @@ Disables a user in AWS Cognito, preventing authentication. User data and roles a
|
||||
|
||||
**Environment Ownership**: When `COGNITO_ENVIRONMENT_ID` is configured, returns `404 Not Found` for users belonging to a different environment.
|
||||
|
||||
**Team Management Permissions**: Super Admin can disable any environment-visible user. User Admin and Client Admin can disable only non-AArete client-level users. Auditor is read-only.
|
||||
|
||||
**Response** (`AdminUserActionResponse`):
|
||||
|
||||
```json
|
||||
@@ -1490,6 +1504,8 @@ Re-enables a previously disabled user in AWS Cognito. Restores authentication ca
|
||||
|
||||
**Environment Ownership**: When `COGNITO_ENVIRONMENT_ID` is configured, returns `404 Not Found` for users belonging to a different environment.
|
||||
|
||||
**Team Management Permissions**: Super Admin can enable any environment-visible user. User Admin and Client Admin can enable only non-AArete client-level users. Auditor is read-only.
|
||||
|
||||
**Response**: Same as disable endpoint with `"action": "enable"`
|
||||
|
||||
---
|
||||
|
||||
@@ -268,6 +268,7 @@ This document provides a comprehensive summary of all REST API endpoints availab
|
||||
- **POST /admin/users** - Create a new user
|
||||
- Request Body: `{email, first_name, last_name, roles[]}`
|
||||
- Creates user in both AWS Cognito and Permit.io
|
||||
- Team Management: Super Admin can create any user; User Admin and Client Admin can create only non-AArete users with `client_user`/`user_admin` roles; Auditor is read-only
|
||||
- Roles: Must exist in Permit.io (e.g., `super_admin`, `user_admin`, `auditor`, `client_user`)
|
||||
- Returns: `{cognito_subject_id, email, first_name, last_name, status, enabled, permit_synced, roles_assigned[], created_at}` (201 Created or 200 OK if already exists)
|
||||
- **Idempotent**: Returns 200 OK if user already exists with matching attributes
|
||||
@@ -275,18 +276,22 @@ This document provides a comprehensive summary of all REST API endpoints availab
|
||||
- **GET /admin/users** - List users with pagination, filtering, and sorting
|
||||
- Query Parameters:
|
||||
- `page` (optional, default: 1, max: 10000) - Page number
|
||||
- `page_size` (optional, default: 50, max: 100) - Results per page
|
||||
- `page_size` (optional, default: 50, max: 60) - Results per page
|
||||
- `search` (optional) - Search term for email/name filtering
|
||||
- `status` (optional, default: `all`) - Filter by status: `enabled`, `disabled`, `all`
|
||||
- `sort_by` (optional, default: `email`) - Sort field: `email`, `created_at`, `last_name`
|
||||
- `sort_order` (optional, default: `asc`) - Sort direction: `asc`, `desc`
|
||||
- Team Management: User Admin and Client Admin see only non-AArete users without `auditor`/`super_admin` roles; Super Admin and Auditor see all environment-visible users
|
||||
- `roles` is populated from Permit.io for each returned user
|
||||
- Returns: `{users[], total, page, page_size, has_more}`
|
||||
|
||||
#### Individual User Operations
|
||||
- **GET /admin/users/{email}** - Get user by email
|
||||
- Hidden users return 404 for User Admin and Client Admin callers
|
||||
- Returns: `{cognito_subject_id, email, first_name, last_name, status, enabled, roles[], created_at, updated_at}`
|
||||
|
||||
- **HEAD /admin/users/{email}** - Check if user exists
|
||||
- Hidden users return 404 for User Admin and Client Admin callers
|
||||
- Returns: 200 OK with headers:
|
||||
- `X-User-Exists-Cognito: boolean` - Whether user exists in Cognito
|
||||
- `X-User-Exists-PermitIO: boolean` - Whether user exists in Permit.io
|
||||
@@ -294,6 +299,7 @@ This document provides a comprehensive summary of all REST API endpoints availab
|
||||
|
||||
- **PATCH /admin/users/{email}** - Update user attributes and roles
|
||||
- Request Body: `{first_name?, last_name?, roles[]?}`
|
||||
- Team Management: Super Admin can update any environment-visible user; User Admin and Client Admin can update only non-AArete client-level users and assign only `client_user`/`user_admin`; Auditor is read-only
|
||||
- **Role Management**: Providing `roles[]` REPLACES all existing roles (not additive)
|
||||
- To add a role: Include all current roles PLUS the new role
|
||||
- To remove a role: Include only roles you want to keep
|
||||
@@ -304,6 +310,7 @@ This document provides a comprehensive summary of all REST API endpoints availab
|
||||
- **DELETE /admin/users/{email}** - Delete user permanently
|
||||
- Query Parameters:
|
||||
- `confirm=true` (required) - Must be set to confirm deletion
|
||||
- Team Management: Super Admin can delete any environment-visible user; User Admin and Client Admin can delete only non-AArete client-level users; Auditor is read-only
|
||||
- Deletes from both AWS Cognito and Permit.io
|
||||
- **Irreversible operation**
|
||||
- Returns: `{success, email, cognito_subject_id, deleted_from{cognito, permit}, timestamp}` (200 OK or 207 Multi-Status for partial deletion)
|
||||
@@ -311,12 +318,14 @@ This document provides a comprehensive summary of all REST API endpoints availab
|
||||
#### User Account Status Management
|
||||
- **POST /admin/users/{email}/disable** - Disable user
|
||||
- Disables user in AWS Cognito, preventing authentication
|
||||
- Team Management: Super Admin can disable any environment-visible user; User Admin and Client Admin can disable only non-AArete client-level users; Auditor is read-only
|
||||
- User data and roles are preserved
|
||||
- **Idempotent**: Safe to call multiple times
|
||||
- Returns: `{success, email, action, cognito_subject_id, timestamp}` (200 OK)
|
||||
|
||||
- **POST /admin/users/{email}/enable** - Enable user
|
||||
- Re-enables a previously disabled user in AWS Cognito
|
||||
- Team Management: Super Admin can enable any environment-visible user; User Admin and Client Admin can enable only non-AArete client-level users; Auditor is read-only
|
||||
- Restores authentication capability
|
||||
- **Idempotent**: Safe to call multiple times
|
||||
- Returns: `{success, email, action, cognito_subject_id, timestamp}` (200 OK)
|
||||
|
||||
Reference in New Issue
Block a user