Skip to content

CAP-PFM-SEC-017Control staff access to customer workspaces

Markdown

CAP-PFM-SEC-017

Control staff access to customer workspaces

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
Staff customer entry has a recorded basis separate from HQ authority.Customer administrators can review and end staff workspace grants.Emergency entry includes its reason, ticket, notifications and reporting.
Surfaces
consoleapi
Intent sources
services-platform:docs/hq/rhythm-hq-plan.md#K1services-platform:docs/hq/rhythm-hq-plan.md#K1aservices-platform:docs/hq/rhythm-hq-plan.md#K1bservices-platform:docs/hq/rhythm-hq-plan.md#K2services-platform:docs/hq/rhythm-hq-plan.md#D2bservices-platform:docs/hq/rhythm-hq-plan.md#H3services-platform:docs/security/built-in-policies.md#5 (D-14, Andrew 2026-10-19)

Controls

35 controls apply, from the corpus control catalogue.

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

Permissions

KeyChecked atScope
hq.tenant-access.requestapiglobal
hq.tenant-access.readapiglobal
hq.emergency-access.useapiglobal
hq.audit.readapiglobal
hq.tenants.readapiglobal
platform.staff-access.readapitenant
platform.staff-access.manageapitenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Customer workspace access for staff requires an active staff-access grant and its ordinary role assignment. The database rejects a cross-customer staff assignment unless an active grant names it; standing grants may cover a whole customer.
invariantservice, databasetest
services-platform:modules/security/tests/integration/services/staff-access/open-emergency-access.integration.spec.js#refuses a staff member’s tenant-scoped assignment into another customer that no grant names
02must prove
Confirmed
An access request names a workspace role, a reason and a duration of one to thirty days. It grants no access and notifies workspace administrators. An existing grant prevents another request for that workspace.
lifecycleservicetest
03must prove
Confirmed
Viewing and deciding staff access requires the workspace’s staff-access permission. The default Security Administrator policy supplies it; Power User and Read Only do not.
origin: services-platform:docs/security/built-in-policies.md#5 (D-14, Andrew 2026-10-19)
permissionapitest
services-platform:modules/security/tests/e2e/power-user-staff-access.e2e.spec.js#refuses the Power User every staff-access route, 403, for the missing key
04must prove
Confirmed
Approval activates access for no more than the requested duration. Decline retains the administrator’s reason, withdrawal identifies the requester as decision maker, and each decision notifies the staff requester.
lifecycleservicetest
05must prove
Confirmed
An authorized workspace administrator may grant access directly to an identified Rhythm staff member. Access starts immediately and notifications go to the member and administrators; an unknown staff address is rejected.
lifecycleservicetest
06must prove
Confirmed
A workspace administrator may revoke its staff grant. Fresh evaluation then refuses the access, although cached decisions can persist. Reconciliation preserves a deliberately revoked standing grant.
lifecycleservicetest
07must prove
Confirmed
Only Rhythm Administrator authority can open emergency access. It requires a workspace role, a reason of at least twenty characters, a ticket and a duration no greater than four hours, with no extension. Administrators and the staff security list are notified; delivery failure does not undo the grant.
validationapi, service, databasetest
08must prove
Confirmed
The intended standing-access lifecycle gives Rhythm Administrators and founding super users customer-level Administrator grants outside Rhythm’s own customer. Role addition and customer creation establish them; role removal, suspension, revocation and deletion end them. Existing standing access prevents emergency access to that customer. The HQ customer-creation path currently omits the reconciliation hook, as recorded in the findings.
lifecycleservicetest
services-platform:modules/security/tests/integration/services/staff-access/rhythm-administrator-standing-access.integration.spec.js#gives each Rhythm Administrator one active customer-level standing grant in every customer but Rhythm’s own
09must prove
Confirmed
Staff may end their own approved or emergency access and submit a cache-flush request. HQ does not permit ending standing grants. Another member’s grant is hidden unless a Rhythm Administrator manages it from staff detail.
lifecycleservicetest
10must prove
Confirmed
Fresh evaluation denies access after grant expiry; grant reads record its expired state. Explicit termination submits a flush request, but existing signed or cached authority may last approximately ninety seconds.
origin: services-platform:docs/security/security-administration.md#14 (known bound accepted 2026-10-13)
policyservicetest
services-platform:modules/security/tests/integration/services/staff-access/open-emergency-access.integration.spec.js#gives no access: the evaluator refuses the role’s keys in that tenant over the assignment
11must prove
Confirmed
Staff-access events belong to the reached customer’s security history and do not appear in another customer’s history. The staff monthly report lists emergency grants opened during the requested month.
invariantservicetest
12
Confirmed
HQ workspace role choices include applicable built-ins and that customer’s roles. They exclude staff roles and other customers’ roles, and identify roles that currently grant nothing.
policyapi, servicetest
services-platform:modules/security/tests/e2e/hq-tenant-roles.e2e.spec.js#leaves out another customer's custom role and the HQ staff roles
13
Confirmed
The console identifies staff workspace access and its end in a banner. Entry without a grant offers emergency access; standing access enters without a dialog and cannot be ended from the banner.
policyconsoletest
react-console:e2e/mock/hq-lists.mock.spec.ts#a standing grant cannot be ended from the banner: End Access is disabled and Return to HQ leaves
14must prove
Confirmed
Customer-level standing access permits customer security administration subject to the same widening and administrator-lockout checks as customer memberships.
permissionservicetest

Scenarios

IdGivenWhenThenProvenance
01Support needs a workspace investigation for a customer ticket.A Support Representative requests Read Only for two days and the customer approves.The grant permits that workspace’s access until expiry or revocation, with the console banner identifying the access.test
services-platform:modules/security/tests/e2e/approved-access.e2e.spec.js#is what lets the staff member into the tenant, and only then
02An incident requires customer-workspace action outside business hours.A Rhythm Administrator opens one hour of emergency access with a reason and ticket.Notifications go to customer administrators and the grant is included in the report for its opening month.test
services-platform:modules/security/tests/integration/services/staff-access/open-emergency-access.integration.spec.js#e-mails each of the tenant’s administrators who, which tenant, which role, why, the ticket and until when

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.