Skip to content

Commit fa6f9f7

Browse files
committed
docs(changeset): correct the scope of two sentences in the pending service-analytics masked-field note
The BREAKING banner named only a SQL deployment, while the SQL echo (POST /api/v1/analytics/sql) now refuses the same members whichever strategy serves the cube: its admission runs in callCtx, ahead of the strategy, and the ObjectQL strategy's echo renders without the engine. "What is not affected" read as unconditional, while the plugin bridge's fallback (a security service that predates getQueryableFields, or answers "no answer") refuses every field declaring a maskingRule whoever the caller is, a system context and a capability holder included. The list now carries that condition and points at the New hook paragraph. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 05be352 commit fa6f9f7

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

‎.changeset/20935-analytics-masked-field-not-queryable.md‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Clause-②: yes (narrowing)
88

99
<!-- adr-0087: not-required (no-migration-prescription) No authorable key, export or stored shape is removed or renamed. The change refuses analytics queries that group, aggregate, filter or sort by a field the caller may only see masked, which the engine already refuses on the data API and on the ObjectQL strategy, so there is nothing for `objectstack migrate meta` to rewrite. The one public-surface addition is a new optional service hook. -->
1010

11-
**BREAKING for analytics queries on a SQL deployment that group, aggregate, filter or sort by a field the caller may only see masked.**
11+
**BREAKING for analytics queries that group, aggregate, filter or sort by a field the caller may only see masked: on a SQL deployment, and on `POST /api/v1/analytics/sql` whichever strategy serves the cube.**
1212

1313
**What changed.** The field-level gate on `POST /api/v1/analytics/query`,
1414
`POST /api/v1/analytics/sql` and `POST /api/v1/analytics/dataset/query` judged
@@ -20,9 +20,11 @@ member naming a masked field with `403 PERMISSION_DENIED`, in the words the
2020
engine uses for the same field. The ObjectQL strategy and the data API already
2121
refused these queries.
2222

23-
**What is not affected.** A caller who holds the capability that lifts a
24-
field's masking rule queries the field as before. A system context is
25-
unaffected. A query that names no masked field answers as before.
23+
**What is not affected.** Unless the `security` service predates
24+
`getQueryableFields` or answers "no answer" (see **New hook**): a caller who
25+
holds the capability that lifts a field's masking rule queries the field as
26+
before, a system context is unaffected, and a query that names no masked
27+
field answers as before.
2628

2729
**New hook.** `AnalyticsServiceConfig.getQueryableFields(object, context)`
2830
supplies the answer. `AnalyticsServicePlugin` wires it to the `security`

0 commit comments

Comments
 (0)