@forge-cms/runtime 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js +25 -4
- package/dist/globals.js.map +1 -1
- package/dist/handlers.d.ts +13 -7
- package/dist/handlers.d.ts.map +1 -1
- package/dist/handlers.js +27 -52
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/operations.d.ts +50 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +162 -57
- package/dist/operations.js.map +1 -1
- package/dist/populate.d.ts +23 -3
- package/dist/populate.d.ts.map +1 -1
- package/dist/populate.js +40 -8
- package/dist/populate.js.map +1 -1
- package/dist/read-policy.d.ts +35 -0
- package/dist/read-policy.d.ts.map +1 -0
- package/dist/read-policy.js +59 -0
- package/dist/read-policy.js.map +1 -0
- package/dist/relation-integrity.d.ts +70 -9
- package/dist/relation-integrity.d.ts.map +1 -1
- package/dist/relation-integrity.js +88 -59
- package/dist/relation-integrity.js.map +1 -1
- package/dist/runtime.d.ts +5 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +8 -29
- package/dist/runtime.js.map +1 -1
- package/dist/typed-api.d.ts +2 -2
- package/dist/typed-api.d.ts.map +1 -1
- package/dist/versions.d.ts +4 -6
- package/dist/versions.d.ts.map +1 -1
- package/dist/versions.js +56 -29
- package/dist/versions.js.map +1 -1
- package/package.json +7 -7
package/dist/operations.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { getLogger, validateCollection } from '@forge-cms/core';
|
|
2
2
|
import { isUniqueConstraintError as isDbUniqueConstraintError } from '@forge-cms/db';
|
|
3
3
|
import { AccessDeniedError, ForgeError, InvalidInputError, NotFoundError, UniqueConstraintError, ValidationFailedError } from './errors.js';
|
|
4
|
-
import { documentMatches, mergeWhere
|
|
4
|
+
import { documentMatches, mergeWhere } from './access.js';
|
|
5
5
|
import { validateSort, validateWhere } from './query-validation.js';
|
|
6
6
|
import { applyAutoSlugs, applyFieldDefaults } from './defaults.js';
|
|
7
|
+
import { checkAccess, statusConstraint } from './read-policy.js';
|
|
7
8
|
import { runAfterChangeHooks, runAfterDeleteHooks, runAfterOperationHooks, runAfterReadHooks, runBeforeChangeHooks, runBeforeDeleteHooks, runBeforeOperationHooks, runBeforeReadHooks, runBeforeValidateHooks, runFieldHooks } from './hooks.js';
|
|
8
9
|
import { assertWritableFields, filterReadableFields, FieldAccessError } from './field-access.js';
|
|
9
10
|
import { populateRecord, populateRecords } from './populate.js';
|
|
10
|
-
import { createVersion, versionsEnabled } from './versions.js';
|
|
11
|
+
import { createVersion, getVersion, versionsEnabled } from './versions.js';
|
|
11
12
|
import { isLocalizedCollection, storeLocalizedDocument, resolveLocalizedDocument } from './localization.js';
|
|
12
13
|
import { checkDeleteRestrictions, handleCascadeDelete, handleSetNullOnDelete } from './relation-integrity.js';
|
|
13
14
|
function getCollectionOrThrow(ctx, slug) {
|
|
@@ -35,55 +36,6 @@ async function runWrite(collection, op) {
|
|
|
35
36
|
throw err;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Resolves the collection's access rule for an operation.
|
|
40
|
-
*
|
|
41
|
-
* A rule that is not configured yields `undefined`, which every caller treats as "allowed" — the
|
|
42
|
-
* Local API has no route-level fallback to defer to, and the HTTP layer applies its own
|
|
43
|
-
* `allowedRoles` gate *before* calling in.
|
|
44
|
-
*/
|
|
45
|
-
async function checkAccess(collection, operation, args) {
|
|
46
|
-
if (args.overrideAccess !== false)
|
|
47
|
-
return { allowed: true };
|
|
48
|
-
const decision = await resolveAccess(collection.access?.[operation], {
|
|
49
|
-
user: args.user ?? null,
|
|
50
|
-
operation,
|
|
51
|
-
collection,
|
|
52
|
-
...(args.id !== undefined && { id: args.id }),
|
|
53
|
-
...(args.data !== undefined && { data: args.data }),
|
|
54
|
-
...(args.doc !== undefined && { doc: args.doc })
|
|
55
|
-
});
|
|
56
|
-
if (decision === undefined)
|
|
57
|
-
return { allowed: true };
|
|
58
|
-
if (!decision.allowed)
|
|
59
|
-
throw new AccessDeniedError();
|
|
60
|
-
return decision;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* The `_status` constraint for a read. Anonymous callers only ever see published documents,
|
|
64
|
-
* whatever they ask for.
|
|
65
|
-
*
|
|
66
|
-
* `defaultStatus` differs by operation, preserving spec 017's behaviour: a **list** stays
|
|
67
|
-
* published-only unless the caller opts in (`?status=draft|all`), because a listing is the surface
|
|
68
|
-
* that leaks unfinished content; a **single read by id** shows drafts to any authenticated caller,
|
|
69
|
-
* since they had to know the id already.
|
|
70
|
-
*/
|
|
71
|
-
function statusConstraint(collection, status, user, overrideAccess, defaultStatus) {
|
|
72
|
-
if (collection.drafts !== true)
|
|
73
|
-
return undefined;
|
|
74
|
-
// Trusted server-side calls see everything unless they ask for a specific status.
|
|
75
|
-
if (overrideAccess) {
|
|
76
|
-
if (status === undefined || status === 'all')
|
|
77
|
-
return undefined;
|
|
78
|
-
return { _status: status };
|
|
79
|
-
}
|
|
80
|
-
if (!user)
|
|
81
|
-
return { _status: 'published' };
|
|
82
|
-
const effective = status ?? defaultStatus;
|
|
83
|
-
if (effective === 'all')
|
|
84
|
-
return undefined;
|
|
85
|
-
return { _status: effective };
|
|
86
|
-
}
|
|
87
39
|
/**
|
|
88
40
|
* Runs a stage that may reject the write. A hook throwing a plain `Error` is a rejection of the
|
|
89
41
|
* caller's payload (400), not a server fault — preserving the spec-013 contract that a throwing
|
|
@@ -112,7 +64,7 @@ async function prepareForRead(ctx, collection, records, args) {
|
|
|
112
64
|
const overrideAccess = args.overrideAccess !== false;
|
|
113
65
|
let docs = records;
|
|
114
66
|
if (args.depth === 1) {
|
|
115
|
-
docs = await populateRecords(docs, collection, ctx);
|
|
67
|
+
docs = await populateRecords(docs, collection, ctx, { user, overrideAccess });
|
|
116
68
|
}
|
|
117
69
|
if (args.overrideAccess === false) {
|
|
118
70
|
docs = await Promise.all(docs.map((doc) => filterReadableFields(doc, collection, user)));
|
|
@@ -402,7 +354,8 @@ export async function update(ctx, args) {
|
|
|
402
354
|
collection: args.collection,
|
|
403
355
|
documentId: args.id,
|
|
404
356
|
data,
|
|
405
|
-
user
|
|
357
|
+
user,
|
|
358
|
+
...(args.versionLabel !== undefined && { label: args.versionLabel })
|
|
406
359
|
});
|
|
407
360
|
}
|
|
408
361
|
await runAfterChangeHooks(collection, {
|
|
@@ -419,6 +372,40 @@ export async function update(ctx, args) {
|
|
|
419
372
|
await runAfterOperationHooks(collection, { operation: 'update', user, overrideAccess, result });
|
|
420
373
|
return result;
|
|
421
374
|
}
|
|
375
|
+
/**
|
|
376
|
+
* Restores a document to a specific historical version — spec 058 §2. Unlike the pre-058
|
|
377
|
+
* implementation (which wrote through `ctx.adapters.database.update()` directly, bypassing access,
|
|
378
|
+
* validation, and hooks), this fetches the raw version snapshot and then calls this module's own
|
|
379
|
+
* `update()`, so a restore gets exactly the same update-access/row-policy/field-write/validation/hook
|
|
380
|
+
* pipeline a normal update gets, and creates exactly one labeled version (via `versionLabel`) instead
|
|
381
|
+
* of a second, bespoke version write.
|
|
382
|
+
*
|
|
383
|
+
* The version snapshot itself is always fetched unfiltered (`overrideAccess: true` on the internal
|
|
384
|
+
* `getVersion` call) — restore's authorization gate is `update()`'s own update-access check on the
|
|
385
|
+
* *current* document, exactly like calling `update()` directly would behave; there is no separate
|
|
386
|
+
* "can this caller read this document's history" gate for restore (see spec 058 §2 for the reasoning).
|
|
387
|
+
* A forbidden or invalid restore throws before `update()` ever reaches the adapter write, so both the
|
|
388
|
+
* current document and its history are left unchanged.
|
|
389
|
+
*/
|
|
390
|
+
export async function restoreVersion(ctx, args) {
|
|
391
|
+
const collection = getCollectionOrThrow(ctx, args.collection);
|
|
392
|
+
if (!versionsEnabled(collection)) {
|
|
393
|
+
throw new Error(`Collection '${args.collection}' does not have versions enabled`);
|
|
394
|
+
}
|
|
395
|
+
const version = await getVersion(ctx, {
|
|
396
|
+
collection: args.collection,
|
|
397
|
+
versionId: args.versionId,
|
|
398
|
+
overrideAccess: true
|
|
399
|
+
});
|
|
400
|
+
return update(ctx, {
|
|
401
|
+
collection: args.collection,
|
|
402
|
+
id: version.documentId,
|
|
403
|
+
data: version.data,
|
|
404
|
+
...(args.user !== undefined && { user: args.user }),
|
|
405
|
+
...(args.overrideAccess !== undefined && { overrideAccess: args.overrideAccess }),
|
|
406
|
+
versionLabel: `Restored from version ${version.versionNumber}`
|
|
407
|
+
});
|
|
408
|
+
}
|
|
422
409
|
const MEDIA_URL_PREFIX = '/api/media/';
|
|
423
410
|
/**
|
|
424
411
|
* Resolves the storage key a stored upload's underlying object lives under: the `_storageKey` every
|
|
@@ -438,6 +425,22 @@ function resolveStorageKey(collectionSlug, doc) {
|
|
|
438
425
|
return idx === -1 ? null : url.slice(idx + MEDIA_URL_PREFIX.length);
|
|
439
426
|
}
|
|
440
427
|
export async function deleteDocument(ctx, args) {
|
|
428
|
+
return deleteDocumentInternal(ctx, args, new Set());
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* The real implementation behind {@link deleteDocument}, plus every cascade-triggered dependent
|
|
432
|
+
* delete (spec 058 §5) — cascade's `RelationMutator.deleteDocument` calls straight back into this
|
|
433
|
+
* function with the same `visited` set, so a multi-level cascade chain runs the full pipeline (access,
|
|
434
|
+
* hooks, relation integrity) at every level. Cycle/diamond protection lives entirely on the *caller*
|
|
435
|
+
* side (`handleCascadeDelete`/`handleSetNullOnDelete` check `visited` before ever invoking the
|
|
436
|
+
* mutator — see that module) — this function marks its own key visited (below) precisely so those
|
|
437
|
+
* caller-side checks can see it, but does not re-check its own key at entry: by the time this function
|
|
438
|
+
* is reached through the mutator, the caller has already decided this key needs processing exactly
|
|
439
|
+
* once, and re-checking here would treat "the caller just claimed this key" as "already done" and skip
|
|
440
|
+
* the actual deletion — see this spec's implementation notes for the regression this caused.
|
|
441
|
+
*/
|
|
442
|
+
async function deleteDocumentInternal(ctx, args, visited) {
|
|
443
|
+
const key = `${args.collection}:${args.id}`;
|
|
441
444
|
const collection = getCollectionOrThrow(ctx, args.collection);
|
|
442
445
|
const user = args.user ?? null;
|
|
443
446
|
const overrideAccess = args.overrideAccess !== false;
|
|
@@ -454,11 +457,23 @@ export async function deleteDocument(ctx, args) {
|
|
|
454
457
|
throw new AccessDeniedError();
|
|
455
458
|
}
|
|
456
459
|
await runRejectableStage(() => runBeforeDeleteHooks(collection, { user, overrideAccess, id: args.id, doc: existing }), 'beforeDelete hook');
|
|
457
|
-
|
|
460
|
+
visited.add(key);
|
|
461
|
+
// Check relation integrity constraints (restrict, and required-field-on-set-null) before any
|
|
462
|
+
// mutation happens.
|
|
458
463
|
await checkDeleteRestrictions(ctx, collection, args.id);
|
|
459
|
-
// Handle cascade and set-null before deleting
|
|
460
|
-
|
|
461
|
-
|
|
464
|
+
// Handle cascade and set-null before deleting — routed through this module's own
|
|
465
|
+
// `deleteDocument`/`update` via a `RelationMutator`, so dependent mutations get the full pipeline
|
|
466
|
+
// (access, field-write checks, validation, hooks, version snapshots) instead of a raw adapter write.
|
|
467
|
+
// Both run with `overrideAccess: true`: a cascade/set-null is a consequence of an already-authorized
|
|
468
|
+
// delete, the same way a database's own `ON DELETE CASCADE` doesn't re-run application ACL per
|
|
469
|
+
// cascaded row — a deliberate, documented choice, not an oversight (spec 058 §5).
|
|
470
|
+
const mutator = {
|
|
471
|
+
deleteDocument: (a) => deleteDocumentInternal(ctx, { ...a, overrideAccess: true }, visited),
|
|
472
|
+
update: (a) => update(ctx, { ...a, overrideAccess: true })
|
|
473
|
+
};
|
|
474
|
+
const integrityOptions = { mutator, visited, ...(user !== null && { user }) };
|
|
475
|
+
await handleCascadeDelete(ctx, collection, args.id, integrityOptions);
|
|
476
|
+
await handleSetNullOnDelete(ctx, collection, args.id, integrityOptions);
|
|
462
477
|
// The database delete must succeed — and only then does the underlying storage object get
|
|
463
478
|
// removed. Deleting the object first (or on a rejected/failed database delete) would orphan the
|
|
464
479
|
// document from its file; deleting it only after confirms the document is really gone.
|
|
@@ -485,5 +500,95 @@ export async function deleteDocument(ctx, args) {
|
|
|
485
500
|
});
|
|
486
501
|
return existing;
|
|
487
502
|
}
|
|
503
|
+
/**
|
|
504
|
+
* A non-persistent simulation of a permitted create/update — spec 058 §3. Before this fix, preview
|
|
505
|
+
* read the raw adapter row and merged caller-supplied `data` with **no** access enforcement at all
|
|
506
|
+
* (no collection/row/field-write check, no draft-visibility check, no field-read projection): any
|
|
507
|
+
* caller who could reach the endpoint could preview (and see every hidden field of) any document,
|
|
508
|
+
* and could smuggle a forbidden field into the merged output because it was never persisted.
|
|
509
|
+
*
|
|
510
|
+
* Existing-document preview now requires the same **update** access an actual `update()` call would
|
|
511
|
+
* (row-level policy included) plus the same draft-visibility a normal single-document read applies —
|
|
512
|
+
* stricter than raw `update()` (which has no draft gate), because preview hands the full merged
|
|
513
|
+
* document back to the caller to render, unlike a blind write. New-document preview requires **create**
|
|
514
|
+
* access. Both require field-write access on every field in `data` when untrusted
|
|
515
|
+
* (`overrideAccess: false`), and project the returned document through the same field-read rules a
|
|
516
|
+
* normal read would (hidden fields never appear in the output). Depth-1 population forwards the
|
|
517
|
+
* caller's `user`/`overrideAccess`, so a populated target obeys the §4 population-visibility fix
|
|
518
|
+
* instead of always resolving as a trusted call.
|
|
519
|
+
*
|
|
520
|
+
* Zero adapter writes, zero version creation, zero committed-mutation hooks — unchanged from before
|
|
521
|
+
* this fix; this function never called `create()`/`update()`/`createVersion()`. Full
|
|
522
|
+
* `validateCollection()` is deliberately not run: preview must be able to render an intentionally
|
|
523
|
+
* incomplete draft, not just a document that would actually pass validation.
|
|
524
|
+
*/
|
|
525
|
+
export async function preview(ctx, args) {
|
|
526
|
+
const collection = getCollectionOrThrow(ctx, args.collection);
|
|
527
|
+
const user = args.user ?? null;
|
|
528
|
+
let existing = null;
|
|
529
|
+
let previewData;
|
|
530
|
+
if (args.id) {
|
|
531
|
+
existing = await ctx.adapters.database.findById(args.collection, args.id);
|
|
532
|
+
if (!existing)
|
|
533
|
+
throw notFound(args.collection, args.id);
|
|
534
|
+
const decision = await checkAccess(collection, 'update', {
|
|
535
|
+
user,
|
|
536
|
+
...(args.overrideAccess !== undefined && { overrideAccess: args.overrideAccess }),
|
|
537
|
+
id: args.id,
|
|
538
|
+
data: args.data,
|
|
539
|
+
doc: existing
|
|
540
|
+
});
|
|
541
|
+
if (decision.where && !documentMatches(existing, decision.where)) {
|
|
542
|
+
throw notFound(args.collection, args.id);
|
|
543
|
+
}
|
|
544
|
+
// Draft visibility: a normal single-document read hides an inaccessible draft from an anonymous
|
|
545
|
+
// caller behind a 404 (never confirming the document exists) — preview must not be a back door
|
|
546
|
+
// around that, since it returns the full document body for the caller to render.
|
|
547
|
+
const draftStatus = statusConstraint(collection, undefined, user, args.overrideAccess !== false, 'all');
|
|
548
|
+
if (draftStatus && !documentMatches(existing, draftStatus)) {
|
|
549
|
+
throw notFound(args.collection, args.id);
|
|
550
|
+
}
|
|
551
|
+
if (args.overrideAccess === false) {
|
|
552
|
+
try {
|
|
553
|
+
await assertWritableFields(args.data, collection, user, 'update');
|
|
554
|
+
}
|
|
555
|
+
catch (err) {
|
|
556
|
+
if (err instanceof FieldAccessError)
|
|
557
|
+
throw new AccessDeniedError(err.message);
|
|
558
|
+
throw err;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
previewData = { ...existing, ...args.data };
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
await checkAccess(collection, 'create', {
|
|
565
|
+
user,
|
|
566
|
+
...(args.overrideAccess !== undefined && { overrideAccess: args.overrideAccess }),
|
|
567
|
+
data: args.data
|
|
568
|
+
});
|
|
569
|
+
if (args.overrideAccess === false) {
|
|
570
|
+
try {
|
|
571
|
+
await assertWritableFields(args.data, collection, user, 'create');
|
|
572
|
+
}
|
|
573
|
+
catch (err) {
|
|
574
|
+
if (err instanceof FieldAccessError)
|
|
575
|
+
throw new AccessDeniedError(err.message);
|
|
576
|
+
throw err;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
previewData = args.data;
|
|
580
|
+
}
|
|
581
|
+
previewData = applyAutoSlugs(collection, applyFieldDefaults(collection, previewData), existing ?? undefined);
|
|
582
|
+
if (args.depth && args.depth > 0) {
|
|
583
|
+
previewData = await populateRecord(previewData, collection, ctx, {
|
|
584
|
+
user,
|
|
585
|
+
...(args.overrideAccess !== undefined && { overrideAccess: args.overrideAccess })
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
if (args.overrideAccess === false) {
|
|
589
|
+
previewData = await filterReadableFields(previewData, collection, user);
|
|
590
|
+
}
|
|
591
|
+
return previewData;
|
|
592
|
+
}
|
|
488
593
|
export { populateRecord, populateRecords };
|
|
489
594
|
//# sourceMappingURL=operations.js.map
|
package/dist/operations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/populate.d.ts
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
|
-
import type { CollectionDefinition } from '@forge-cms/core';
|
|
1
|
+
import type { CmsUser, CollectionDefinition } from '@forge-cms/core';
|
|
2
2
|
import type { DatabaseRecord } from '@forge-cms/db';
|
|
3
3
|
import type { OperationContext } from './context.js';
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export interface PopulateOptions {
|
|
5
|
+
user?: CmsUser | null;
|
|
6
|
+
/**
|
|
7
|
+
* Defaults to `true` (trusted Local API call, matching every other operation's default) — the
|
|
8
|
+
* populated document is embedded as-is. `false` enforces the target collection's own read policy
|
|
9
|
+
* — collection-level access, row-level predicates, and draft visibility (spec 058 §4) — before the
|
|
10
|
+
* document is even fetched, then projects it through `filterReadableFields` against its field-level
|
|
11
|
+
* `access.read` rules, the same way the top-level document already is. Without the field-level half
|
|
12
|
+
* of this, `depth: 1` on a `relation`/`upload` field embedded the related document's raw row
|
|
13
|
+
* untouched — on a `defineUsersCollection()`/`withAuthFields()` target this leaked `passwordHash`
|
|
14
|
+
* (`access.read: []`, meant to be unreadable by anyone) into any anonymous or field-filtered
|
|
15
|
+
* response with a relation to `users`, e.g. `post.author -> users` (found building spec 055's
|
|
16
|
+
* external-consumer fixture). Field-level projection alone was not enough, though: a readable
|
|
17
|
+
* parent document does not make an unrelated *target* document readable — a public `post` could be
|
|
18
|
+
* readable while its related `author` (or a draft target) stayed private, and depth-1 population
|
|
19
|
+
* would still embed it in full. §4 closes that: a caller cannot see more of a populated target
|
|
20
|
+
* through population than they could by reading that target directly.
|
|
21
|
+
*/
|
|
22
|
+
overrideAccess?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function populateRecords(records: DatabaseRecord[], collection: CollectionDefinition, ctx: OperationContext, options?: PopulateOptions): Promise<DatabaseRecord[]>;
|
|
25
|
+
export declare function populateRecord(record: DatabaseRecord, collection: CollectionDefinition, ctx: OperationContext, options?: PopulateOptions): Promise<DatabaseRecord>;
|
|
6
26
|
//# sourceMappingURL=populate.d.ts.map
|
package/dist/populate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../src/populate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../src/populate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAYrD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB;;;;;;;;;;;;;;;OAeG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAoBD,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,oBAAoB,EAChC,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,EAAE,CAAC,CA0E3B;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,oBAAoB,EAChC,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
package/dist/populate.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { filterReadableFields } from './field-access.js';
|
|
2
|
+
import { mergeWhere } from './access.js';
|
|
3
|
+
import { checkAccess, statusConstraint } from './read-policy.js';
|
|
4
|
+
import { AccessDeniedError } from './errors.js';
|
|
1
5
|
/**
|
|
2
6
|
* Every field `depth: 1` resolves: `relation` and — since spec 040 — `upload`, which is a single
|
|
3
7
|
* relation to an upload-enabled collection in everything but name. Leaving `upload` out meant every
|
|
@@ -15,13 +19,16 @@ function getRelationFields(collection) {
|
|
|
15
19
|
return { name, targetSlug: options.collection, many: options.many === true };
|
|
16
20
|
});
|
|
17
21
|
}
|
|
18
|
-
export async function populateRecords(records, collection, ctx) {
|
|
22
|
+
export async function populateRecords(records, collection, ctx, options = {}) {
|
|
19
23
|
const relationFields = getRelationFields(collection);
|
|
20
24
|
if (relationFields.length === 0 || records.length === 0)
|
|
21
25
|
return records;
|
|
22
26
|
const populated = records.map((record) => ({ ...record }));
|
|
27
|
+
const user = options.user ?? null;
|
|
28
|
+
const filterRelated = options.overrideAccess === false;
|
|
23
29
|
for (const { name, targetSlug, many } of relationFields) {
|
|
24
|
-
|
|
30
|
+
const targetCollection = ctx.getCollection(targetSlug);
|
|
31
|
+
if (!targetCollection)
|
|
25
32
|
continue;
|
|
26
33
|
const ids = new Set();
|
|
27
34
|
for (const record of populated) {
|
|
@@ -38,10 +45,35 @@ export async function populateRecords(records, collection, ctx) {
|
|
|
38
45
|
}
|
|
39
46
|
if (ids.size === 0)
|
|
40
47
|
continue;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
let related = [];
|
|
49
|
+
if (filterRelated) {
|
|
50
|
+
// A readable parent must not automatically grant visibility into the target collection: apply
|
|
51
|
+
// its own collection/row/draft read policy to the query itself, so an inaccessible or hidden
|
|
52
|
+
// target is never fetched in the first place (spec 058 §4) — not merely field-projected after
|
|
53
|
+
// the fact. A collection-level denial (`AccessDeniedError`) means every target of this field is
|
|
54
|
+
// hidden; `related` stays `[]` and every id in it resolves the same way a dangling/missing id
|
|
55
|
+
// already does (single → null, many → omitted) — inaccessible and missing are indistinguishable.
|
|
56
|
+
try {
|
|
57
|
+
const decision = await checkAccess(targetCollection, 'read', {
|
|
58
|
+
user,
|
|
59
|
+
overrideAccess: false
|
|
60
|
+
});
|
|
61
|
+
const idFilter = { id: { in: Array.from(ids) } };
|
|
62
|
+
const where = mergeWhere(mergeWhere(idFilter, decision.where), statusConstraint(targetCollection, undefined, user, false, 'all')) ?? idFilter;
|
|
63
|
+
related = await ctx.adapters.database.findMany({ collection: targetSlug, where });
|
|
64
|
+
related = await Promise.all(related.map((doc) => filterReadableFields(doc, targetCollection, user)));
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (!(err instanceof AccessDeniedError))
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
related = await ctx.adapters.database.findMany({
|
|
73
|
+
collection: targetSlug,
|
|
74
|
+
where: { id: { in: Array.from(ids) } }
|
|
75
|
+
});
|
|
76
|
+
}
|
|
45
77
|
const byId = new Map(related.map((r) => [r.id, r]));
|
|
46
78
|
for (const record of populated) {
|
|
47
79
|
const value = record[name];
|
|
@@ -58,8 +90,8 @@ export async function populateRecords(records, collection, ctx) {
|
|
|
58
90
|
}
|
|
59
91
|
return populated;
|
|
60
92
|
}
|
|
61
|
-
export async function populateRecord(record, collection, ctx) {
|
|
62
|
-
const [result] = await populateRecords([record], collection, ctx);
|
|
93
|
+
export async function populateRecord(record, collection, ctx, options = {}) {
|
|
94
|
+
const [result] = await populateRecords([record], collection, ctx, options);
|
|
63
95
|
return result ?? record;
|
|
64
96
|
}
|
|
65
97
|
//# sourceMappingURL=populate.js.map
|
package/dist/populate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.js","sourceRoot":"","sources":["../src/populate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"populate.js","sourceRoot":"","sources":["../src/populate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CmsUser, CollectionDefinition, DraftStatus } from '@forge-cms/core';
|
|
2
|
+
import type { DatabaseWhere } from '@forge-cms/db';
|
|
3
|
+
import type { AccessDecision } from './access.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shared read-side policy primitives used by `operations.ts` (`find`/`findByID`/`count`), plus (spec
|
|
6
|
+
* 058) `versions.ts` and `populate.ts` — every path that decides "can this caller see this document"
|
|
7
|
+
* goes through the exact same two functions, instead of each alternate content path reimplementing
|
|
8
|
+
* (and inevitably drifting from) collection/row/draft access. Neither function here imports
|
|
9
|
+
* `operations.ts`, so `versions.ts`/`populate.ts` can depend on this module with no import cycle.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Resolves the collection's access rule for an operation.
|
|
13
|
+
*
|
|
14
|
+
* A rule that is not configured yields `undefined`, which every caller treats as "allowed" — the
|
|
15
|
+
* Local API has no route-level fallback to defer to, and the HTTP layer applies its own
|
|
16
|
+
* `allowedRoles` gate *before* calling in.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkAccess(collection: CollectionDefinition, operation: 'read' | 'create' | 'update' | 'delete', args: {
|
|
19
|
+
user?: CmsUser | null;
|
|
20
|
+
overrideAccess?: boolean;
|
|
21
|
+
id?: string;
|
|
22
|
+
data?: Record<string, unknown>;
|
|
23
|
+
doc?: Record<string, unknown>;
|
|
24
|
+
}): Promise<AccessDecision>;
|
|
25
|
+
/**
|
|
26
|
+
* The `_status` constraint for a read. Anonymous callers only ever see published documents,
|
|
27
|
+
* whatever they ask for.
|
|
28
|
+
*
|
|
29
|
+
* `defaultStatus` differs by operation, preserving spec 017's behaviour: a **list** stays
|
|
30
|
+
* published-only unless the caller opts in (`?status=draft|all`), because a listing is the surface
|
|
31
|
+
* that leaks unfinished content; a **single read by id** shows drafts to any authenticated caller,
|
|
32
|
+
* since they had to know the id already.
|
|
33
|
+
*/
|
|
34
|
+
export declare function statusConstraint(collection: CollectionDefinition, status: DraftStatus | 'all' | undefined, user: CmsUser | null, overrideAccess: boolean, defaultStatus: DraftStatus | 'all'): DatabaseWhere | undefined;
|
|
35
|
+
//# sourceMappingURL=read-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-policy.d.ts","sourceRoot":"","sources":["../src/read-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAClD,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,GACA,OAAO,CAAC,cAAc,CAAC,CAezB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,SAAS,EACvC,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,WAAW,GAAG,KAAK,GACjC,aAAa,GAAG,SAAS,CAc3B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AccessDeniedError } from './errors.js';
|
|
2
|
+
import { resolveAccess } from './access.js';
|
|
3
|
+
/**
|
|
4
|
+
* Shared read-side policy primitives used by `operations.ts` (`find`/`findByID`/`count`), plus (spec
|
|
5
|
+
* 058) `versions.ts` and `populate.ts` — every path that decides "can this caller see this document"
|
|
6
|
+
* goes through the exact same two functions, instead of each alternate content path reimplementing
|
|
7
|
+
* (and inevitably drifting from) collection/row/draft access. Neither function here imports
|
|
8
|
+
* `operations.ts`, so `versions.ts`/`populate.ts` can depend on this module with no import cycle.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the collection's access rule for an operation.
|
|
12
|
+
*
|
|
13
|
+
* A rule that is not configured yields `undefined`, which every caller treats as "allowed" — the
|
|
14
|
+
* Local API has no route-level fallback to defer to, and the HTTP layer applies its own
|
|
15
|
+
* `allowedRoles` gate *before* calling in.
|
|
16
|
+
*/
|
|
17
|
+
export async function checkAccess(collection, operation, args) {
|
|
18
|
+
if (args.overrideAccess !== false)
|
|
19
|
+
return { allowed: true };
|
|
20
|
+
const decision = await resolveAccess(collection.access?.[operation], {
|
|
21
|
+
user: args.user ?? null,
|
|
22
|
+
operation,
|
|
23
|
+
collection,
|
|
24
|
+
...(args.id !== undefined && { id: args.id }),
|
|
25
|
+
...(args.data !== undefined && { data: args.data }),
|
|
26
|
+
...(args.doc !== undefined && { doc: args.doc })
|
|
27
|
+
});
|
|
28
|
+
if (decision === undefined)
|
|
29
|
+
return { allowed: true };
|
|
30
|
+
if (!decision.allowed)
|
|
31
|
+
throw new AccessDeniedError();
|
|
32
|
+
return decision;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The `_status` constraint for a read. Anonymous callers only ever see published documents,
|
|
36
|
+
* whatever they ask for.
|
|
37
|
+
*
|
|
38
|
+
* `defaultStatus` differs by operation, preserving spec 017's behaviour: a **list** stays
|
|
39
|
+
* published-only unless the caller opts in (`?status=draft|all`), because a listing is the surface
|
|
40
|
+
* that leaks unfinished content; a **single read by id** shows drafts to any authenticated caller,
|
|
41
|
+
* since they had to know the id already.
|
|
42
|
+
*/
|
|
43
|
+
export function statusConstraint(collection, status, user, overrideAccess, defaultStatus) {
|
|
44
|
+
if (collection.drafts !== true)
|
|
45
|
+
return undefined;
|
|
46
|
+
// Trusted server-side calls see everything unless they ask for a specific status.
|
|
47
|
+
if (overrideAccess) {
|
|
48
|
+
if (status === undefined || status === 'all')
|
|
49
|
+
return undefined;
|
|
50
|
+
return { _status: status };
|
|
51
|
+
}
|
|
52
|
+
if (!user)
|
|
53
|
+
return { _status: 'published' };
|
|
54
|
+
const effective = status ?? defaultStatus;
|
|
55
|
+
if (effective === 'all')
|
|
56
|
+
return undefined;
|
|
57
|
+
return { _status: effective };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=read-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-policy.js","sourceRoot":"","sources":["../src/read-policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAgC,EAChC,SAAkD,EAClD,IAMC;IAED,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE5D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;QACnE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QACvB,SAAS;QACT,UAAU;QACV,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;KACjD,CAAC,CAAC;IAEH,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAgC,EAChC,MAAuC,EACvC,IAAoB,EACpB,cAAuB,EACvB,aAAkC;IAElC,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEjD,kFAAkF;IAClF,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAE3C,MAAM,SAAS,GAAG,MAAM,IAAI,aAAa,CAAC;IAC1C,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC"}
|