Skip to content

CAP-PFM-SEC-009Maintain console memberships

Markdown

CAP-PFM-SEC-009

Maintain console memberships

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleSecurity, Customers and WorkspacesRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Administrators find memberships and inspect profile, roles, access and history.Lifecycle actions distinguish temporary suspension, membership revocation and record deletion.Refused changes preserve the customer’s remaining security administration.
Surfaces
consoleapijob
Intent sources
services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)services-platform:docs/security/security-administration.md#16 (Andrew accepted the delete, 2026-10-12)services-platform:docs/security/security-administration.md#2. Capability checklist (U1 to U7)

Controls

35 controls apply, from the corpus control catalogue.

TC-AVL-001 TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-AZ-006 TC-DAT-001 TC-DAT-003 TC-DAT-004 TC-IAM-001 TC-IAM-002 TC-IAM-003 TC-IAM-004 TC-IAM-005 TC-IAM-006 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-MON-001 TC-PI-001 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-TEN-004 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.users.readapitenant
platform.security-access.manageapitenant
platform.users.createapitenant
platform.users.updateapitenant
platform.users.deleteapitenant
platform.users.bulkapitenant
platform.users.manage-identitiesapitenant

Business Rules

12 rules, 10 to be proved before approval. A rule's product intent is derived from its origin: 12 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Customer user lists contain that customer’s console memberships with roles, surname ordering, name/e-mail search, status, role and invitation filters and pages of at most 100; revoked memberships are hidden by default, and platform staff authority alone cannot access another customer’s list.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)
policyapi, servicetest
services-platform:modules/security/tests/e2e/console-users.e2e.spec.js#refuses a platform-scope caller the users of a customer they are not of, because this route is console
02
Confirmed
Membership detail includes profile, assignments with role and grantor, and the latest invitation’s delivery information; missing and outside-customer identities share the refusal.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)
policyservicetest
services-platform:modules/security/tests/integration/services/membership/console-users.integration.spec.js#answers the person, the grant with the role it names and who granted it, the roles they hold, and their invitation
03must prove
Confirmed
Versioned profile edits change only first name, last name, display name, time zone and locale, preserving e-mail, status and customer ownership.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
validationapi, servicetest
services-platform:modules/security/tests/integration/services/membership/console-users.integration.spec.js#leaves the e-mail address, the status and the wall exactly as they were
04must prove
Confirmed
Deactivation commits suspended membership and withdrawn invitations, then attempts pool disablement and flush submission; fresh membership reads refuse it, cached decisions can persist, pool failure is reported without reversing suspension, and self-suspension or revocation fails.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
lifecycleserviceobserved
05must prove
Confirmed
Reactivation applies only to suspended memberships, requires widening authority over their retained grants and attempts pool enablement without reviving withdrawn invitations; an enablement failure is reported while the membership change remains committed.
origin: services-platform:docs/security/security-administration.md#Phase 6 (reinstatement is judged as widening)
permissionserviceobserved
06must prove
Confirmed
Revocation ends membership, outstanding invitations and held assignments; returning requires a fresh invitation rather than reinstatement.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
lifecycleservicetest
services-platform:modules/security/tests/unit/services/invitations/suspend-revoke.spec.js#ends the membership, its invitations and every assignment it held in one transaction
07must prove
Confirmed
A guarded write that would reduce a non-Rhythm customer from one or more qualifying administrators to none rolls back; qualifying administrators are active customer console users with active, unconditional customer-wide roles containing the security-administrator policy, and an already-zero count does not trigger refusal.
origin: services-platform:docs/security/security-administration.md#4. Delegation, escalation and lockout
invariantserviceobserved
08must prove
Confirmed
Deletion requires delete and access-management authority, preserves name attribution and refuses referenced identities, self-deletion, loss of the customer’s last qualifying administrator or loss of Rhythm’s last Rhythm Administrator.
origin: services-platform:docs/security/security-administration.md#16 (Andrew accepted the delete, 2026-10-12)
lifecycleapi, service, databasetest
services-platform:modules/security/tests/unit/services/invitations/user-deletion.spec.js#refuses a delete that would leave the customer with nobody who can administer its security
09must prove
Confirmed
Revocation and deletion commit durable pool-account work for retried background disablement or removal; the response can precede completion of that work.
origin: services-platform:docs/security/security-administration.md#16 (Andrew accepted the delete, 2026-10-12)
policyservicetest
services-platform:modules/security/tests/integration/services/dispatch/pool-account-removals.integration.spec.js#removes the account on the second delivery, and tells SQS the item is done
10must prove
Confirmed
Console memberships belong to one customer and portal memberships to one workspace; the same address can identify distinct memberships across those boundaries, same-boundary duplicates fail and ordinary edits cannot move lifecycle.
origin: services-platform:docs/security/security-administration.md#1. What the area is for (decision U7)
invariantapi, service, databasetest
services-platform:modules/security/tests/e2e/users.e2e.spec.js#refuses a duplicate e-mail in the same wall (400) and a wall the access type does not allow (400)
11must prove
Confirmed
Canonical sign-in linking requires identity-management authority and a pool account that exists, is enabled and carries the membership’s verified matching address.
validationservicetest
services-platform:modules/security/tests/unit/services/identity/link-cognito-identity.spec.js#never links on the request's say-so: the pool user must exist, be enabled, and carry the user's verified e-mail
12
Confirmed
The user view separates Profile, Roles, Access and History, keeps editing on a separate page and hides Edit when user-management permission is absent.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)
policyconsoletest
react-console:e2e/mock/security-view-edit.mock.spec.ts#somebody who may not manage users gets no Edit, and the edit page sends them to the view

Scenarios

IdGivenWhenThenProvenance
01The customer has one qualifying security administrator.An administrator tries to remove that person’s Administrator assignment.The change is refused because it would remove the customer’s remaining security administration.test
react-console:e2e/security/users.spec.ts#refuses to remove the Administrator role from the last person who holds it
02A colleague should temporarily lose membership access.An administrator deactivates the colleague.Fresh membership checks refuse the suspended account; cached authorization has its existing freshness limit, and later reinstatement is available.test
react-console:e2e/security/users.spec.ts#deactivating really shuts somebody out, and reactivating lets them back in

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.