Skip to content

CAP-PFM-MTD-011Control Custom Record Audiences

Markdown

CAP-PFM-MTD-011

Control Custom Record Audiences

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationPartially observed

KindCapabilityProduct areaPlatformModuleMetadata and Organization-defined RecordsRevision1

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
Record permissions and property exposure let an organization limit access to sensitive custom information.Portal ownership predicates are implemented in the data layer.
Surfaces
consoleapi
Intent sources
services-platform:docs/proposals/custom-objects/09-decisions.md#D-08, D-09, D-10, D-19services-platform:docs/milestones/PLAT-M5-custom-records.md#D-19, PLAT-M5 D10services-platform:docs/milestones/plans/PLAT-M5-plan.md#PLAT-M5-S08, PLAT-M5-S14

Controls

27 controls apply, from the corpus control catalogue.

TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-004 TC-DAT-005 TC-IAM-003 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-005 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.custom-records.readapirecord
platform.custom-records.queryapirecord
platform.custom-records.createapirecord
platform.custom-records.updateapirecord
platform.custom-records.deleteapirecord
platform.custom-records.publishapirecord
platform.custom-records.exportapirecord
platform.custom-records.historyapirecord

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Shared record permissions support assignments scoped to one custom object, hiding other object records behind a not-found response.
permissionapi, servicetest
services-platform:modules/custom-objects/tests/e2e/custom-object-records.e2e.spec.js#refuses the same role another object’s records, answering as if the object were not there
02must prove
Confirmed
Roles-only objects require an active object-specific assignment in addition to permission reach; built-in, workspace-wide and customer-wide grants alone do not expose them.
origin: services-platform:docs/milestones/PLAT-M5-custom-records.md#PLAT-M5 D10 (Andrew, 2026-10-19: "Build it in PLAT-M5")
permissionservicetest
services-platform:modules/custom-objects/tests/e2e/custom-object-records.e2e.spec.js#keeps a roles-only object from a customer-wide assignment, answering as if it were not there
03must prove
Confirmed
Platform Administrator receives every definition and record key, User receives definition reads plus record read, query, create, update and history, and Read Only receives definition reads plus record read, query and history.
permissionapitest
services-platform:modules/custom-objects/tests/unit/custom-object-permission-keys.spec.ts#gives Platform User reading, querying, creating and updating records and their history, and reading definitions
04must prove
Confirmed
Record archival and restoration require the separately granted delete permission and support object-specific scope.
origin: services-platform:docs/proposals/custom-objects/09-decisions.md#D-19 (Andrew, 2026-10-18: "Delete key")
permissionapitest
services-platform:modules/custom-objects/tests/unit/custom-object-permission-keys.spec.ts#requires one key per route, each a console route, the health route public, every record route scoped to its object
05
Confirmed
Record export is marked sensitive and reserved to administrators, but no current route requires its dedicated key.
permissionapitest
services-platform:modules/custom-objects/tests/unit/custom-object-permission-keys.spec.ts#marks exporting records sensitive, and no other key of the two resources
06must prove
Confirmed
Audience projection shows all properties to staff, owner-or-broader properties to owners, portal-or-public properties to members and only public properties to anonymous readers; portal links exclude staff-only types.
calculationservicetest
services-platform:modules/custom-objects/tests/unit/exposure.spec.ts#shows a portal member the portal and public properties
07must prove
Confirmed
Data-layer portal predicates combine ownership, organizational roles, links, publication and eligibility, exclude archived records and limit members without contacts to publication or eligibility; portal routes remain absent.
permissionservicetest
services-platform:modules/custom-objects/tests/integration/services/persistence/portal-ownership-predicates.integration.spec.js#grants the owner the boat it owns now, and neither an ended ownership nor an archived boat
08must prove
Confirmed
Console action visibility follows permissions, leaving readers without edit controls and hiding inaccessible object navigation and cards.
permissionconsoletest
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S08.spec.ts#PLAT-M5-S08: a read-only volunteer is offered no edit actions; a person without access sees no menu and no card
09
Confirmed
System execution without a permission slice can reach every custom object in its workspace.
permissionservicedocumented
services-platform:docs/custom-objects.md#18. Records: permissions and scope

Scenarios

IdGivenWhenThenProvenance
01Enforcement Actions uses object-specific Investigators assignments.Open the console as an investigator and as unrelated staff.Investigators can view and edit, while unrelated staff receive no menu, card or record.test
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S14.spec.ts#PLAT-M5-S14: restricted to the Investigators role and granted in Security: only investigators see and edit

Edge Cases

IdGivenWhenThenProvenance
02Boat access rules include crew and owning-organization billing roles.Evaluate readers with current ties and an expired organizational role.The active crew and billing ties grant access while the expired role does not.test

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.