Skip to content

CAP-PFM-SEC-012Model customer responsibilities with roles and policies

Markdown

CAP-PFM-SEC-012

Model customer responsibilities with roles and policies

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
Customers compose their own reusable access definitions.Validation explains invalid permissions and conditions before saving.Definition lifecycle and version checks protect users of existing roles and policies.
Surfaces
consoleapi
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#Placeholder roles (D-18, Andrew 2026-10-19)services-platform:docs/security/security-administration.md#3. Built-in and custom policies

Controls

43 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-CHG-001 TC-CHG-002 TC-CHG-003 TC-CHG-004 TC-CHG-005 TC-CHG-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-DAT-005 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-MON-003 TC-PI-001 TC-PI-003 TC-PI-005 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.security-roles.readapitenant
platform.security-roles.manageapitenant
platform.security-policies.readapitenant
platform.security-policies.manageapitenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Definition and catalog reads use their read permissions, while creation, modification, copying and archive require the corresponding management permissions.
origin: services-platform:docs/security/security-administration.md#4. Delegation, escalation and lockout
permissionapitest
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#lets a caller holding only the read key read a role, and refuses the same caller the write
02must prove
Confirmed
Built-in roles and policies reject edits as read-only through service and database safeguards; copying creates a customer-owned definition retaining source identity and version.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
invariantapi, service, databasetest
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#refuses a write against a built-in as read-only rather than as a record that is not there
03must prove
Confirmed
Allow rules require exact catalog permissions, deny rules may use matching patterns, and unknown, unmatched, repeated or empty permission selections fail validation.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
validationapi, service, consoletest
services-platform:modules/security/tests/unit/services/persistence/rule-validation.spec.ts#names the key the catalog does not have, and the rule it is in
04must prove
Confirmed
Conditions must use supported schedule, network or enabled eligibility forms; an eligibility reference must resolve to an allowed binding, and unsupported forms fail.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
validationserviceobserved
05
Confirmed
Rule validation can return indexed problems without saving and warns, without rejecting the rules, when application permissions lack the application-access key.
origin: services-platform:docs/security/security-administration.md#Policies and catalog (DEF-CRM-0557, 2026-10-19)
policyservicetest
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#warns, without refusing, that CRM keys allowed without crm.application.access grant nothing in CRM
06must prove
Confirmed
Roles compose built-in policies, active customer-owned policies and inline rules; cross-customer or archived policies and customer policies on built-in roles fail service and database checks.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
invariantservice, databasetest
services-platform:modules/security/tests/integration/db/security-definition-integrity.integration.spec.js#refuses another customer's policy, the one way authority could cross a wall through a definition
07must prove
Confirmed
A role definition cannot carry scope; assignments determine where the role applies.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)
validationapitest
services-platform:modules/security/tests/integration/services/definitions/role-request-scope.integration.spec.js#refuses a create that states intended_scope as an unknown field, and writes no role
08must prove
Confirmed
An empty role is allowed and labelled as granting nothing, as are deny-only roles or roles whose policies supply no active allow rules.
origin: services-platform:docs/security/security-administration.md#Placeholder roles (D-18, Andrew 2026-10-19)
calculationservice, consoletest
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#answers a role whose only rule denies as granting nothing
09must prove
Confirmed
Custom definitions use archive rather than deletion; assigned roles and referenced policies cannot be archived, and refusal details identify their users.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
lifecycleservicetest
services-platform:modules/security/tests/integration/services/definitions/manage-roles.integration.spec.js#refuses to archive a role somebody still holds, names them, and leaves it active
10must prove
Confirmed
Definition edits that free permissions, including conditional-deny weakening, require the editor’s effective authority at affected grant scopes and reject widening affecting the editor’s own grants.
origin: services-platform:docs/security/security-administration.md#4. Delegation, escalation and lockout
permissionservicetest
services-platform:modules/security/tests/integration/services/definitions/manage-roles.integration.spec.js#refuses an edit that would widen a role the editor holds themselves, whoever else holds it
11must prove
Confirmed
A role edit that removes the customer’s remaining qualifying security administrator rolls back.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
invariantservicetest
services-platform:modules/security/tests/integration/services/definitions/manage-roles.integration.spec.js#refuses an edit that would leave the customer with no security administrator, and detaches nothing
12must prove
Confirmed
Definition changes require the current version and reject stale edits without overwriting the saved definition.
validationapi, servicetest
services-platform:modules/security/tests/integration/services/definitions/manage-policies.integration.spec.js#refuses an edit made against a version the policy has moved past, leaving the row as it was
13
Confirmed
Permission-changing saves and archive request an authorizer flush after commit; renames and unchanged saves do not, and submission does not establish gateway eviction.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)
policyservicetest
14must prove
Confirmed
Customer definition operations hide staff-only roles and policies as unavailable and prohibit copying or composing from them.
permissionservicetest
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#refuses a role built from a staff-only policy, and copying a staff-only role or policy
15
Confirmed
The editor’s permission catalog includes application, tier and sensitivity and omits staff-only keys for non-staff callers.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-13/14 Final acceptance)
policyservicetest
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#leaves the staff-only keys out for a caller who is not staff

Scenarios

IdGivenWhenThenProvenance
01The finance team needs export access constrained by its work schedule.An authorized administrator prepares the relevant deny policy and attaches it to the Finance role.Evaluation applies the policy’s schedule conditions, and the policy view identifies the role using it.test
react-console:e2e/security/policies.spec.ts#is used by a role, and the policy says so
02The customer wants a variation of Standard User.An authorized administrator duplicates that built-in role and adds an allowed inline permission.The customer owns the copy and can identify the built-in version it came from.test
services-platform:modules/security/tests/e2e/definitions.e2e.spec.js#answers a copied role where it came from, with the version copied and the version of the source today

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.