@opensaas/stack-core 0.39.2 → 0.41.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +189 -0
- package/CLAUDE.md +103 -0
- package/dist/access/access-filter.d.ts +157 -14
- package/dist/access/access-filter.d.ts.map +1 -1
- package/dist/access/access-filter.js +470 -42
- package/dist/access/access-filter.js.map +1 -1
- package/dist/access/access-filter.test.js +982 -17
- package/dist/access/access-filter.test.js.map +1 -1
- package/dist/access/denied-relation-visibility.test.d.ts +2 -0
- package/dist/access/denied-relation-visibility.test.d.ts.map +1 -0
- package/dist/access/denied-relation-visibility.test.js +114 -0
- package/dist/access/denied-relation-visibility.test.js.map +1 -0
- package/dist/access/engine.d.ts +54 -1
- package/dist/access/engine.d.ts.map +1 -1
- package/dist/access/engine.js +84 -0
- package/dist/access/engine.js.map +1 -1
- package/dist/access/engine.test.d.ts +2 -0
- package/dist/access/engine.test.d.ts.map +1 -0
- package/dist/access/engine.test.js +56 -0
- package/dist/access/engine.test.js.map +1 -0
- package/dist/access/errors.d.ts +62 -0
- package/dist/access/errors.d.ts.map +1 -1
- package/dist/access/errors.js +85 -2
- package/dist/access/errors.js.map +1 -1
- package/dist/access/field-access.d.ts +12 -0
- package/dist/access/field-access.d.ts.map +1 -1
- package/dist/access/field-access.js +22 -2
- package/dist/access/field-access.js.map +1 -1
- package/dist/access/field-access.test.js +66 -0
- package/dist/access/field-access.test.js.map +1 -1
- package/dist/access/field-visibility.d.ts +2 -1
- package/dist/access/field-visibility.d.ts.map +1 -1
- package/dist/access/field-visibility.js +107 -15
- package/dist/access/field-visibility.js.map +1 -1
- package/dist/access/index.d.ts +9 -2
- package/dist/access/index.d.ts.map +1 -1
- package/dist/access/index.js +11 -2
- package/dist/access/index.js.map +1 -1
- package/dist/access/multi-column-read-write.test.js.map +1 -1
- package/dist/access/query-validation.d.ts +31 -0
- package/dist/access/query-validation.d.ts.map +1 -1
- package/dist/access/query-validation.js +75 -16
- package/dist/access/query-validation.js.map +1 -1
- package/dist/access/relationship-count.d.ts +41 -3
- package/dist/access/relationship-count.d.ts.map +1 -1
- package/dist/access/relationship-count.js +44 -7
- package/dist/access/relationship-count.js.map +1 -1
- package/dist/access/relationship-count.test.js +62 -0
- package/dist/access/relationship-count.test.js.map +1 -1
- package/dist/access/synthetic-include-read.test.d.ts +2 -0
- package/dist/access/synthetic-include-read.test.d.ts.map +1 -0
- package/dist/access/synthetic-include-read.test.js +121 -0
- package/dist/access/synthetic-include-read.test.js.map +1 -0
- package/dist/config/types.d.ts +98 -32
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/hook-pipeline.d.ts +2 -2
- package/dist/context/hook-pipeline.d.ts.map +1 -1
- package/dist/context/hook-pipeline.js.map +1 -1
- package/dist/context/index.d.ts +35 -2
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +121 -27
- package/dist/context/index.js.map +1 -1
- package/dist/context/nested-operations.d.ts +2 -2
- package/dist/context/nested-operations.d.ts.map +1 -1
- package/dist/context/nested-operations.js +74 -15
- package/dist/context/nested-operations.js.map +1 -1
- package/dist/context/write-pipeline.d.ts +3 -2
- package/dist/context/write-pipeline.d.ts.map +1 -1
- package/dist/context/write-pipeline.js +31 -34
- package/dist/context/write-pipeline.js.map +1 -1
- package/dist/fields/index.d.ts +13 -1
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +50 -5
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/relationship-foreign-key.test.d.ts +2 -0
- package/dist/fields/relationship-foreign-key.test.d.ts.map +1 -0
- package/dist/fields/relationship-foreign-key.test.js +18 -0
- package/dist/fields/relationship-foreign-key.test.js.map +1 -0
- package/dist/hooks/index.d.ts +16 -15
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/case-utils.d.ts +15 -0
- package/dist/lib/case-utils.d.ts.map +1 -1
- package/dist/lib/case-utils.js +21 -0
- package/dist/lib/case-utils.js.map +1 -1
- package/dist/lib/case-utils.test.js +23 -1
- package/dist/lib/case-utils.test.js.map +1 -1
- package/dist/lib/prisma-errors.d.ts +38 -0
- package/dist/lib/prisma-errors.d.ts.map +1 -0
- package/dist/lib/prisma-errors.js +53 -0
- package/dist/lib/prisma-errors.js.map +1 -0
- package/dist/mcp/constants.d.ts +23 -0
- package/dist/mcp/constants.d.ts.map +1 -0
- package/dist/mcp/constants.js +23 -0
- package/dist/mcp/constants.js.map +1 -0
- package/dist/mcp/field-schema.d.ts +8 -0
- package/dist/mcp/field-schema.d.ts.map +1 -0
- package/dist/mcp/field-schema.js +69 -0
- package/dist/mcp/field-schema.js.map +1 -0
- package/dist/mcp/handler.d.ts.map +1 -1
- package/dist/mcp/handler.js +76 -90
- package/dist/mcp/handler.js.map +1 -1
- package/dist/mcp/projection.d.ts +62 -0
- package/dist/mcp/projection.d.ts.map +1 -0
- package/dist/mcp/projection.js +390 -0
- package/dist/mcp/projection.js.map +1 -0
- package/dist/utils/password.d.ts +3 -1
- package/dist/utils/password.d.ts.map +1 -1
- package/dist/utils/password.js +4 -2
- package/dist/utils/password.js.map +1 -1
- package/package.json +2 -2
- package/src/access/access-filter.test.ts +1528 -18
- package/src/access/access-filter.ts +708 -42
- package/src/access/denied-relation-visibility.test.ts +173 -0
- package/src/access/engine.test.ts +67 -0
- package/src/access/engine.ts +109 -1
- package/src/access/errors.ts +97 -2
- package/src/access/field-access.test.ts +78 -0
- package/src/access/field-access.ts +34 -2
- package/src/access/field-visibility.ts +171 -25
- package/src/access/index.ts +25 -0
- package/src/access/multi-column-read-write.test.ts +3 -2
- package/src/access/query-validation.ts +136 -9
- package/src/access/relationship-count.test.ts +75 -0
- package/src/access/relationship-count.ts +53 -10
- package/src/access/synthetic-include-read.test.ts +179 -0
- package/src/config/types.ts +98 -32
- package/src/context/hook-pipeline.ts +4 -2
- package/src/context/index.ts +203 -42
- package/src/context/nested-operations.ts +96 -27
- package/src/context/write-pipeline.ts +60 -36
- package/src/fields/index.ts +55 -5
- package/src/fields/relationship-foreign-key.test.ts +29 -0
- package/src/hooks/index.ts +22 -15
- package/src/index.ts +17 -1
- package/src/lib/case-utils.test.ts +32 -0
- package/src/lib/case-utils.ts +26 -0
- package/src/lib/prisma-errors.ts +86 -0
- package/src/mcp/constants.ts +24 -0
- package/src/mcp/field-schema.ts +84 -0
- package/src/mcp/handler.ts +109 -107
- package/src/mcp/projection.ts +497 -0
- package/src/utils/password.ts +5 -3
- package/tests/access-relationships.test.ts +3 -3
- package/tests/access.test.ts +83 -0
- package/tests/context.test.ts +452 -17
- package/tests/field-types.test.ts +113 -0
- package/tests/hook-context-secured.test.ts +424 -0
- package/tests/mcp-fields-projection-access.test.ts +250 -0
- package/tests/mcp-handler.test.ts +695 -4
- package/tests/nested-access-and-hooks.test.ts +389 -0
- package/tests/nested-write-synthetic-relation.test.ts +437 -0
- package/tests/password-types.test.ts +28 -0
- package/tests/password.test.ts +16 -2
- package/tests/prisma-errors.test.ts +141 -0
- package/tests/singleton.test.ts +9 -1
- package/tests/to-one-include-access-filter.test.ts +172 -0
- package/tests/with-session.test.ts +243 -0
- package/tests/write-pipeline.test.ts +29 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/access/errors.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IAEpB,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAW3D;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACzC,KAAK,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAE9D,YAAY,KAAK,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,EAUlE;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IAE7B,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAUpE;CACF;AASD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IAC/C,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAE9C,YAAY,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAWnE;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/access/errors.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IAEpB,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAW3D;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACzC,KAAK,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAE9D,YAAY,KAAK,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,EAUlE;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IAE7B,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAUpE;CACF;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAEvB,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAQ5C;CACF;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAEvB,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAS5C;CACF;AASD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IAC/C,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAE9C,YAAY,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAWnE;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;IAChD,OAAO,EAAE,MAAM,CAAA;IAEtB,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAU3C;CACF"}
|
package/dist/access/errors.js
CHANGED
|
@@ -86,7 +86,54 @@ export class RelationFilterAccessDeniedError extends Error {
|
|
|
86
86
|
this.relatedListKey = relatedListKey;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Thrown when a caller-supplied `include` names a key that resolves to
|
|
91
|
+
* neither a declared relationship, a synthetic back-relation (a list-only
|
|
92
|
+
* `ref`'s ORM-required opposite field, which no list config declares — see
|
|
93
|
+
* `resolveSyntheticReverseRelation`), nor `_count`. Before this,
|
|
94
|
+
* `buildAccessScopedInclude`'s scoping walk passed an unrecognised key
|
|
95
|
+
* straight through unscoped — the one surface among `data`/`where`/`orderBy`/
|
|
96
|
+
* `include` that failed open rather than closed (issue #1082). `sudo` never
|
|
97
|
+
* reaches this: it skips `buildAccessScopedInclude` entirely (see
|
|
98
|
+
* `resolveReadInclude` in `context/index.ts`), matching every other
|
|
99
|
+
* access-control escape hatch.
|
|
100
|
+
*/
|
|
101
|
+
export class UndeclaredIncludeKeyError extends Error {
|
|
102
|
+
listKey;
|
|
103
|
+
fieldKey;
|
|
104
|
+
constructor(listKey, fieldKey) {
|
|
105
|
+
super(`Cannot include "${listKey}.${fieldKey}" — it is not a field of this list. ` +
|
|
106
|
+
`Undeclared include keys are rejected, matching data/where/orderBy keys.`);
|
|
107
|
+
this.name = 'UndeclaredIncludeKeyError';
|
|
108
|
+
this.listKey = listKey;
|
|
109
|
+
this.fieldKey = fieldKey;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Thrown when a caller-supplied `_count.select` in `include` names a key that
|
|
114
|
+
* is not a countable to-many relation — undeclared, a scalar, a virtual, or a
|
|
115
|
+
* to-one relationship. Mirrors `UndeclaredIncludeKeyError`'s rejection for the
|
|
116
|
+
* ordinary `include` walk, for the one key shape that was allowlisted through
|
|
117
|
+
* unscoped rather than rejected (#1082's "Out of scope", closed here by
|
|
118
|
+
* #1087). A key naming a synthetic back-relation (#1082) is NOT rejected — it
|
|
119
|
+
* is a genuine countable to-many, resolved the same way the ordinary
|
|
120
|
+
* `include` walk resolves it. `sudo` never reaches this: it skips
|
|
121
|
+
* `buildAccessScopedInclude` entirely (see `resolveReadInclude` in
|
|
122
|
+
* `context/index.ts`), matching every other access-control escape hatch.
|
|
123
|
+
*/
|
|
124
|
+
export class UndeclaredCountKeyError extends Error {
|
|
125
|
+
listKey;
|
|
126
|
+
fieldKey;
|
|
127
|
+
constructor(listKey, fieldKey) {
|
|
128
|
+
super(`Cannot count "${listKey}.${fieldKey}" — it is not a countable to-many relationship on this ` +
|
|
129
|
+
`list. A \`_count.select\` key must name a declared to-many relationship or a synthetic ` +
|
|
130
|
+
`back-relation, matching the ordinary include keys this list accepts.`);
|
|
131
|
+
this.name = 'UndeclaredCountKeyError';
|
|
132
|
+
this.listKey = listKey;
|
|
133
|
+
this.fieldKey = fieldKey;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function describeAccessResult(result) {
|
|
90
137
|
if (result === null)
|
|
91
138
|
return 'null';
|
|
92
139
|
if (result === undefined)
|
|
@@ -122,7 +169,7 @@ export class InvalidFieldAccessResultError extends Error {
|
|
|
122
169
|
operation;
|
|
123
170
|
constructor(operation, result) {
|
|
124
171
|
super(`Field-level access control for operation "${operation}" returned ` +
|
|
125
|
-
`${
|
|
172
|
+
`${describeAccessResult(result)}, not a boolean. Field access is a per-field ` +
|
|
126
173
|
`visibility decision — it must return true or false, and (unlike operation-level access) ` +
|
|
127
174
|
`cannot scope which rows are affected. If you meant to restrict access based on the row or ` +
|
|
128
175
|
`the write payload, evaluate the condition yourself and return a boolean, e.g. ` +
|
|
@@ -131,4 +178,40 @@ export class InvalidFieldAccessResultError extends Error {
|
|
|
131
178
|
this.operation = operation;
|
|
132
179
|
}
|
|
133
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Thrown when operation-level `create` access control returns anything other
|
|
183
|
+
* than a strict `boolean`. `OperationAccess['create']` is typed as
|
|
184
|
+
* `AccessControl`, which also accepts a `PrismaFilter` — the shape
|
|
185
|
+
* `query`/`update`/`delete` legitimately use to scope which rows an
|
|
186
|
+
* operation may touch (see ADR-0001). Create has none of that to scope: there
|
|
187
|
+
* is no existing row, and — unlike update/delete, which re-check a returned
|
|
188
|
+
* filter against the target via `findFirst` — no equivalent re-check is
|
|
189
|
+
* possible against data that doesn't exist in the database yet.
|
|
190
|
+
*
|
|
191
|
+
* A filter-returning `create` rule type-checks (the shared `AccessControl`
|
|
192
|
+
* type admits it) and reads as though it scopes the create. Before this it
|
|
193
|
+
* fell through a check that only tested `=== false` and was silently treated
|
|
194
|
+
* as a full allow. This is the same defect shape ADR-0030 closed for
|
|
195
|
+
* field-level access, resolved the same way per ADR-0022 (an engine that
|
|
196
|
+
* cannot compute a scope must deny, never pass through) — a loud, distinct
|
|
197
|
+
* failure rather than a wider `null`/`[]` Silent failure, because this is a
|
|
198
|
+
* config bug, not an access denial.
|
|
199
|
+
*
|
|
200
|
+
* Deliberately does not expose the offending result as a public field, for
|
|
201
|
+
* the same reason as `InvalidFieldAccessResultError`: there is no
|
|
202
|
+
* concretely-typed shape to give it, and the root CLAUDE.md forbids exposing
|
|
203
|
+
* `unknown`/`any` as part of a package's external API.
|
|
204
|
+
*/
|
|
205
|
+
export class InvalidCreateAccessResultError extends Error {
|
|
206
|
+
listKey;
|
|
207
|
+
constructor(listKey, result) {
|
|
208
|
+
super(`Operation-level "create" access control for "${listKey}" returned ` +
|
|
209
|
+
`${describeAccessResult(result)}, not a boolean. Create cannot be row-scoped — there is no ` +
|
|
210
|
+
`existing row, and no input data is available to test a filter against here. Return a ` +
|
|
211
|
+
`boolean from create access, or move the ownership check into a \`resolveInput\` or ` +
|
|
212
|
+
`\`validate\` hook, where the input data is in scope.`);
|
|
213
|
+
this.name = 'InvalidCreateAccessResultError';
|
|
214
|
+
this.listKey = listKey;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
134
217
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/access/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IAC/C,OAAO,CAAQ;IACf,QAAQ,CAAQ;IAChB,KAAK,CAAQ;IAEpB,YAAY,OAAe,EAAE,QAAgB,EAAE,KAAa;QAC1D,KAAK,CACH,mBAAmB,OAAO,IAAI,QAAQ,sBAAsB,KAAK,0BAA0B;YACzF,qCAAqC,sBAAsB,kCAAkC;YAC7F,2FAA2F;YAC3F,8DAA8D,CACjE,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAA;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACzC,KAAK,CAAkD;IAE9D,YAAY,KAAuD;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChF,KAAK,CACH,iCAAiC,IAAI,+CAA+C;YAClF,wFAAwF;YACxF,0FAA0F;YAC1F,iCAAiC,CACpC,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IACjD,OAAO,CAAQ;IACf,QAAQ,CAAQ;IAChB,cAAc,CAAQ;IAE7B,YAAY,OAAe,EAAE,QAAgB,EAAE,cAAsB;QACnE,KAAK,CACH,kBAAkB,OAAO,IAAI,QAAQ,yBAAyB,cAAc,WAAW;YACrF,yFAAyF;YACzF,gFAAgF,CACnF,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAA;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACtC,CAAC;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/access/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Session, AccessContext } from './types.js';
|
|
2
2
|
import type { FieldAccess } from './types.js';
|
|
3
|
+
import type { OpenSaasConfig } from '../config/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Shared field-level access evaluation.
|
|
5
6
|
*
|
|
@@ -79,5 +80,16 @@ export declare function filterWritableFields<T extends Record<string, unknown>>(
|
|
|
79
80
|
_isSudo?: boolean;
|
|
80
81
|
};
|
|
81
82
|
inputData?: Record<string, unknown>;
|
|
83
|
+
/**
|
|
84
|
+
* The list being written and the full config — used ONLY to recognise a
|
|
85
|
+
* synthetic reverse-relation key (`from_<List>_<field>`, #978) among the
|
|
86
|
+
* undeclared keys sudo would otherwise pass through unchecked. Both
|
|
87
|
+
* production call sites (the write pipeline, nested-operations) supply
|
|
88
|
+
* these; a direct unit test that omits them keeps the pre-#978 sudo
|
|
89
|
+
* behaviour of passing any undeclared key through, since it has no config
|
|
90
|
+
* to resolve a synthetic key against.
|
|
91
|
+
*/
|
|
92
|
+
listName?: string;
|
|
93
|
+
config?: OpenSaasConfig;
|
|
82
94
|
}): Promise<Partial<T>>;
|
|
83
95
|
//# sourceMappingURL=field-access.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-access.d.ts","sourceRoot":"","sources":["../../src/access/field-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"field-access.d.ts","sourceRoot":"","sources":["../../src/access/field-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AA8CxD;;;;;;;;;GASG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EACvC,IAAI,EAAE;IACJ,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,GACA,OAAO,CAAC,OAAO,CAAC,CA+ClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,IAAI,EAAE;IACJ,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/C,GACA,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,wBAAsB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,MAAM,CAClB,MAAM,EACN;IACE,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;CACjD,CACF,EACD,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,IAAI,EAAE;IACJ,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB,GACA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CA4IrB"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// under ESM live bindings.
|
|
4
4
|
import { ValidationError } from '../hooks/index.js';
|
|
5
5
|
import { InvalidFieldAccessResultError } from './errors.js';
|
|
6
|
+
import { resolveSyntheticReverseRelation } from './engine.js';
|
|
6
7
|
/**
|
|
7
8
|
* Marks a throw caused by touching {@link createPoisonedItem}'s `item`, as
|
|
8
9
|
* opposed to some other error a field rule legitimately raises. Not exported
|
|
@@ -232,10 +233,29 @@ export async function filterWritableFields(data, fieldConfigs, operation, args)
|
|
|
232
233
|
// declares (e.g. back-relations like `from_Enrolment_student`), so allowing
|
|
233
234
|
// an undeclared key to pass through lets a non-sudo caller drive ungated
|
|
234
235
|
// nested writes on undeclared back-relations. Mirror Keystone's
|
|
235
|
-
// GraphQL-schema behaviour and reject it.
|
|
236
|
-
// bypass, so undeclared keys still pass through under sudo.
|
|
236
|
+
// GraphQL-schema behaviour and reject it.
|
|
237
237
|
if (!fieldConfig) {
|
|
238
238
|
if (isSudo) {
|
|
239
|
+
// #978 — sudo bypasses ACCESS CONTROL, not the hooks/validation a
|
|
240
|
+
// recognised relation is entitled to. A synthetic reverse-relation key
|
|
241
|
+
// (a list-only ref's back-relation) is handed to the caller unchanged
|
|
242
|
+
// so processNestedOperations can run its target list's full pipeline,
|
|
243
|
+
// exactly as it would for a declared relationship field. Any other
|
|
244
|
+
// undeclared key has no such route to hooks — passing it straight to
|
|
245
|
+
// Prisma is the same silent-bypass shape this issue closed for
|
|
246
|
+
// relations, so it is refused even under sudo. `listName`/`config`
|
|
247
|
+
// are omitted only by direct unit tests of this function, which keep
|
|
248
|
+
// the pre-#978 blanket sudo passthrough since they have no config to
|
|
249
|
+
// resolve a synthetic key against.
|
|
250
|
+
if (args.listName && args.config) {
|
|
251
|
+
const synthetic = resolveSyntheticReverseRelation(fieldName, args.listName, args.config);
|
|
252
|
+
if (!synthetic) {
|
|
253
|
+
throw new ValidationError([
|
|
254
|
+
`Cannot ${operation} "${fieldName}": it is not a field of this list. ` +
|
|
255
|
+
`Undeclared data keys are rejected, even under sudo.`,
|
|
256
|
+
]);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
239
259
|
filtered[fieldName] = value;
|
|
240
260
|
continue;
|
|
241
261
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-access.js","sourceRoot":"","sources":["../../src/access/field-access.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"field-access.js","sourceRoot":"","sources":["../../src/access/field-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -566,4 +566,70 @@ describe('filterWritableFields', () => {
|
|
|
566
566
|
expect(filtered.author).toEqual({ connect: { id: 'user-1' } });
|
|
567
567
|
});
|
|
568
568
|
});
|
|
569
|
+
// ── #978: under sudo, only a synthetic reverse-relation key is a recognised
|
|
570
|
+
// undeclared key — anything else is refused, even under sudo ──────────────
|
|
571
|
+
describe('filterWritableFields — #978 tightened sudo undeclared-key guard', () => {
|
|
572
|
+
// A minimal config: Account is the target of ChargeRequest's list-only ref
|
|
573
|
+
// (`ref: 'Account'`, no field named on Account), so the generator
|
|
574
|
+
// synthesizes `from_ChargeRequest_account` on Account.
|
|
575
|
+
const config = {
|
|
576
|
+
db: { provider: 'sqlite', url: 'file:./dev.db' },
|
|
577
|
+
lists: {
|
|
578
|
+
Account: { fields: { name: { type: 'text' } } },
|
|
579
|
+
ChargeRequest: {
|
|
580
|
+
fields: {
|
|
581
|
+
kind: { type: 'text' },
|
|
582
|
+
account: { type: 'relationship', ref: 'Account' },
|
|
583
|
+
},
|
|
584
|
+
},
|
|
585
|
+
},
|
|
586
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
587
|
+
};
|
|
588
|
+
it('passes a synthetic reverse-relation key through under sudo, when config/listName are supplied', async () => {
|
|
589
|
+
const fieldConfigs = { name: { type: 'text' } };
|
|
590
|
+
const data = {
|
|
591
|
+
name: 'Acme',
|
|
592
|
+
from_ChargeRequest_account: { create: { kind: 'DEPOSIT' } },
|
|
593
|
+
};
|
|
594
|
+
const filtered = await filterWritableFields(data, fieldConfigs, 'update', {
|
|
595
|
+
session: null,
|
|
596
|
+
item: { id: 'a1' },
|
|
597
|
+
context: sudoContext(),
|
|
598
|
+
inputData: data,
|
|
599
|
+
listName: 'Account',
|
|
600
|
+
config,
|
|
601
|
+
});
|
|
602
|
+
expect(filtered).toHaveProperty('name', 'Acme');
|
|
603
|
+
expect(filtered).toHaveProperty('from_ChargeRequest_account');
|
|
604
|
+
});
|
|
605
|
+
it('throws on a genuinely unknown key under sudo, when config/listName are supplied', async () => {
|
|
606
|
+
const fieldConfigs = { name: { type: 'text' } };
|
|
607
|
+
const data = {
|
|
608
|
+
name: 'Acme',
|
|
609
|
+
totallyBogusKey: 'value',
|
|
610
|
+
};
|
|
611
|
+
await expect(filterWritableFields(data, fieldConfigs, 'update', {
|
|
612
|
+
session: null,
|
|
613
|
+
item: { id: 'a1' },
|
|
614
|
+
context: sudoContext(),
|
|
615
|
+
inputData: data,
|
|
616
|
+
listName: 'Account',
|
|
617
|
+
config,
|
|
618
|
+
})).rejects.toThrow(/totallyBogusKey/);
|
|
619
|
+
});
|
|
620
|
+
it('keeps the pre-#978 blanket sudo passthrough when config/listName are omitted', async () => {
|
|
621
|
+
// Pins the fallback direct unit tests above (e.g. "passes undeclared data
|
|
622
|
+
// keys through under sudo") rely on: with no config to resolve a synthetic
|
|
623
|
+
// key against, any undeclared key still passes through under sudo.
|
|
624
|
+
const fieldConfigs = { name: { type: 'text' } };
|
|
625
|
+
const data = { name: 'Acme', totallyBogusKey: 'value' };
|
|
626
|
+
const filtered = await filterWritableFields(data, fieldConfigs, 'update', {
|
|
627
|
+
session: null,
|
|
628
|
+
item: { id: 'a1' },
|
|
629
|
+
context: sudoContext(),
|
|
630
|
+
inputData: data,
|
|
631
|
+
});
|
|
632
|
+
expect(filtered).toHaveProperty('totallyBogusKey', 'value');
|
|
633
|
+
});
|
|
634
|
+
});
|
|
569
635
|
//# sourceMappingURL=field-access.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-access.test.js","sourceRoot":"","sources":["../../src/access/field-access.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field-access.test.js","sourceRoot":"","sources":["../../src/access/field-access.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,11 @@ import type { Session, AccessContext } from './types.js';
|
|
|
2
2
|
import type { OpenSaasConfig, FieldConfig } from '../config/types.js';
|
|
3
3
|
import type { DeclaredOnlyTree } from './declared-dependencies.js';
|
|
4
4
|
import type { FieldSelectionScope } from '../query/index.js';
|
|
5
|
+
import type { ToOneAccessVisibilityTree, CountAccessDenialTree } from './access-filter.js';
|
|
5
6
|
export declare function filterReadableFields<T extends Record<string, unknown>>(item: T, fieldConfigs: Record<string, FieldConfig>, args: {
|
|
6
7
|
session: Session | null;
|
|
7
8
|
context: AccessContext & {
|
|
8
9
|
_isSudo?: boolean;
|
|
9
10
|
};
|
|
10
|
-
}, config?: OpenSaasConfig, depth?: number, listKey?: string, declaredOnly?: DeclaredOnlyTree, selection?: FieldSelectionScope): Promise<Partial<T>>;
|
|
11
|
+
}, config?: OpenSaasConfig, depth?: number, listKey?: string, declaredOnly?: DeclaredOnlyTree, selection?: FieldSelectionScope, toOneVisibility?: ToOneAccessVisibilityTree, countDenials?: CountAccessDenialTree): Promise<Partial<T>>;
|
|
11
12
|
//# sourceMappingURL=field-visibility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-visibility.d.ts","sourceRoot":"","sources":["../../src/access/field-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"field-visibility.d.ts","sourceRoot":"","sources":["../../src/access/field-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAc,MAAM,oBAAoB,CAAA;AAKjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAElE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAiN1F,wBAAsB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACzC,IAAI,EAAE;IACJ,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/C,EACD,MAAM,CAAC,EAAE,cAAc,EACvB,KAAK,GAAE,MAAU,EACjB,OAAO,CAAC,EAAE,MAAM,EAMhB,YAAY,GAAE,gBAA0C,EAGxD,SAAS,CAAC,EAAE,mBAAmB,EAK/B,eAAe,GAAE,yBAA4D,EAI7E,YAAY,GAAE,qBAAoD,GACjE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAkUrB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { getRelatedListConfig } from './engine.js';
|
|
1
|
+
import { getRelatedListConfig, resolveSyntheticReverseRelation } from './engine.js';
|
|
2
2
|
import { checkFieldAccess } from './field-access.js';
|
|
3
3
|
import { RESOLVE_CHAIN_MAX_LENGTH } from './depth-limits.js';
|
|
4
4
|
import { ResolveOutputCycleError } from './errors.js';
|
|
5
5
|
import { emptyDeclaredOnlyTree } from './declared-dependencies.js';
|
|
6
|
+
import { emptyToOneAccessVisibilityTree, isToOneRelationship, emptyCountAccessDenialTree, } from './access-filter.js';
|
|
6
7
|
// NOTE: `context/index.ts` imports `filterReadableFields` from this module
|
|
7
8
|
// (via the `access/index.ts` barrel) — this is an intentional cyclic
|
|
8
9
|
// dependency, the same shape and for the same reason as the one documented in
|
|
@@ -113,7 +114,16 @@ export async function filterReadableFields(item, fieldConfigs, args, config, dep
|
|
|
113
114
|
declaredOnly = emptyDeclaredOnlyTree(),
|
|
114
115
|
// The fragment scope this level was reached under (ADR-0027, see module doc
|
|
115
116
|
// above), and the same tree one level down for each nested relation.
|
|
116
|
-
selection
|
|
117
|
+
selection,
|
|
118
|
+
// Resolved to-one existence checks at THIS level (issue #974, see module
|
|
119
|
+
// doc above), and the same tree one level down for each nested relation —
|
|
120
|
+
// regardless of that relation's own arity, since a filtered to-one can sit
|
|
121
|
+
// beneath a to-many hop.
|
|
122
|
+
toOneVisibility = emptyToOneAccessVisibilityTree(),
|
|
123
|
+
// `_count.select` keys denied outright at THIS level (issue #1087, see
|
|
124
|
+
// module doc above), and the same tree one level down for each nested
|
|
125
|
+
// relation whose own nested include named a further `_count`.
|
|
126
|
+
countDenials = emptyCountAccessDenialTree()) {
|
|
117
127
|
const filtered = {};
|
|
118
128
|
// Multi-column fields (e.g. storage image()/file() in Keystone-parity mode)
|
|
119
129
|
// back several physical columns rather than one. Before the per-field pass,
|
|
@@ -172,21 +182,42 @@ selection) {
|
|
|
172
182
|
// cap used to let a relation be scoped correctly at the DB level while
|
|
173
183
|
// still returning with unfiltered fields past this function's own,
|
|
174
184
|
// separately-tracked limit (issue #830).
|
|
185
|
+
const isDeclaredRelationshipField = fieldConfig?.type === 'relationship' && 'ref' in fieldConfig && !!fieldConfig.ref;
|
|
186
|
+
// A synthetic back-relation (#1082) — no declared field of its own on
|
|
187
|
+
// this list, so resolved by name against the owning list's relationship
|
|
188
|
+
// field instead. `undefined` (not `fieldConfig`) is the signal it's
|
|
189
|
+
// worth trying: a declared-but-non-relationship field (e.g. a scalar or
|
|
190
|
+
// virtual) must fall through to the generic path below, unchanged.
|
|
191
|
+
const synthetic = !isDeclaredRelationshipField && fieldConfig === undefined && config && listKey
|
|
192
|
+
? resolveSyntheticReverseRelation(fieldName, listKey, config)
|
|
193
|
+
: null;
|
|
175
194
|
if (config &&
|
|
176
|
-
|
|
177
|
-
'ref' in fieldConfig &&
|
|
178
|
-
fieldConfig.ref &&
|
|
195
|
+
(isDeclaredRelationshipField || synthetic) &&
|
|
179
196
|
value !== null &&
|
|
180
197
|
value !== undefined) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
198
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
199
|
+
let relatedConfig = null;
|
|
200
|
+
if (isDeclaredRelationshipField) {
|
|
201
|
+
const canRead = await checkFieldAccess(fieldConfig?.access, 'read', {
|
|
202
|
+
...args,
|
|
203
|
+
item: workingItem,
|
|
204
|
+
});
|
|
205
|
+
if (!canRead) {
|
|
206
|
+
accessDeniedKeys.add(fieldName);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
relatedConfig = getRelatedListConfig(fieldConfig.ref, config);
|
|
210
|
+
}
|
|
211
|
+
else if (synthetic) {
|
|
212
|
+
// No declared field means no field-level `read` gate of its own to
|
|
213
|
+
// check here — the owning list's OWN field-level access is enforced
|
|
214
|
+
// by the recursive `filterReadableFields` call below, exactly as it
|
|
215
|
+
// would be for a declared relationship's related rows.
|
|
216
|
+
relatedConfig = {
|
|
217
|
+
listName: synthetic.sourceListName,
|
|
218
|
+
listConfig: synthetic.sourceListConfig,
|
|
219
|
+
};
|
|
188
220
|
}
|
|
189
|
-
const relatedConfig = getRelatedListConfig(fieldConfig.ref, config);
|
|
190
221
|
// The declared-only tree for whatever THIS relation's own list computes,
|
|
191
222
|
// e.g. a field on the related list that declares its own `needs`. Falls
|
|
192
223
|
// back to an empty tree when this relation isn't declaration-related at
|
|
@@ -198,12 +229,29 @@ selection) {
|
|
|
198
229
|
// unrestricted — matching what naming a relation without narrowing it
|
|
199
230
|
// further has always meant.
|
|
200
231
|
const nestedSelection = selection?.nested[fieldName];
|
|
232
|
+
// This relation's own resolved to-one visibility, if
|
|
233
|
+
// `buildAccessScopedInclude` flagged anything beneath it (issue #974).
|
|
234
|
+
// Falls back to empty — the common case for a relation with no
|
|
235
|
+
// filtered to-one anywhere in its own nested include.
|
|
236
|
+
const nestedToOneVisibility = toOneVisibility.nested[fieldName] ?? emptyToOneAccessVisibilityTree();
|
|
237
|
+
// This key's OWN to-one existence check, if `fieldName` itself is a
|
|
238
|
+
// filtered to-one relation (as opposed to one further down its tree).
|
|
239
|
+
const toOneEntry = toOneVisibility.filters[fieldName];
|
|
240
|
+
// This relation's own denied `_count` keys, if `buildAccessScopedInclude`
|
|
241
|
+
// flagged any beneath it (issue #1087). Falls back to empty — the
|
|
242
|
+
// common case for a relation with no denied `_count` anywhere in its
|
|
243
|
+
// own nested include.
|
|
244
|
+
const nestedCountDenials = countDenials.nested[fieldName] ?? emptyCountAccessDenialTree();
|
|
201
245
|
if (relatedConfig) {
|
|
202
246
|
if (Array.isArray(value)) {
|
|
203
|
-
filtered[fieldName] = await Promise.all(value.map((relatedItem) => filterReadableFields(relatedItem, relatedConfig.listConfig.fields, args, config, depth + 1, relatedConfig.listName, nestedDeclaredOnly, nestedSelection)));
|
|
247
|
+
filtered[fieldName] = await Promise.all(value.map((relatedItem) => filterReadableFields(relatedItem, relatedConfig.listConfig.fields, args, config, depth + 1, relatedConfig.listName, nestedDeclaredOnly, nestedSelection, nestedToOneVisibility, nestedCountDenials)));
|
|
204
248
|
}
|
|
205
249
|
else if (typeof value === 'object') {
|
|
206
|
-
|
|
250
|
+
const relatedId = value.id;
|
|
251
|
+
const isVisible = !toOneEntry || toOneEntry.kind !== 'visible' || toOneEntry.ids.has(String(relatedId));
|
|
252
|
+
filtered[fieldName] = isVisible
|
|
253
|
+
? await filterReadableFields(value, relatedConfig.listConfig.fields, args, config, depth + 1, relatedConfig.listName, nestedDeclaredOnly, nestedSelection, nestedToOneVisibility, nestedCountDenials)
|
|
254
|
+
: null;
|
|
207
255
|
}
|
|
208
256
|
}
|
|
209
257
|
else {
|
|
@@ -230,6 +278,50 @@ selection) {
|
|
|
230
278
|
accessDeniedKeys.add(fieldName);
|
|
231
279
|
}
|
|
232
280
|
}
|
|
281
|
+
// Relations `buildAccessScopedInclude` denied outright (to-one: issue #974,
|
|
282
|
+
// to-many: issue #1103) were never asked of Prisma at all, so `fieldName`
|
|
283
|
+
// has no entry in `workingItem` and the loop above never visits it. Force
|
|
284
|
+
// it present here — matching what a denied read means everywhere else in
|
|
285
|
+
// the context — rather than leaving the key silently absent: `null` for a
|
|
286
|
+
// to-one relation, `[]` for a to-many one. A synthetic back-relation
|
|
287
|
+
// (`fieldConfig` undefined — #1082) is always to-many, the same arity
|
|
288
|
+
// `buildAccessScopedInclude` assumes for it.
|
|
289
|
+
for (const [fieldName, entry] of Object.entries(toOneVisibility.filters)) {
|
|
290
|
+
if (entry.kind !== 'denied')
|
|
291
|
+
continue;
|
|
292
|
+
if (fieldName in filtered || fieldName in workingItem)
|
|
293
|
+
continue;
|
|
294
|
+
if (selection?.fields && !selection.fields.has(fieldName))
|
|
295
|
+
continue;
|
|
296
|
+
const fieldConfig = fieldConfigs[fieldName];
|
|
297
|
+
const canRead = await checkFieldAccess(fieldConfig?.access, 'read', {
|
|
298
|
+
...args,
|
|
299
|
+
item: workingItem,
|
|
300
|
+
});
|
|
301
|
+
if (!canRead) {
|
|
302
|
+
accessDeniedKeys.add(fieldName);
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const isToMany = !fieldConfig || !isToOneRelationship(fieldConfig);
|
|
306
|
+
filtered[fieldName] = isToMany ? [] : null;
|
|
307
|
+
}
|
|
308
|
+
// `_count.select` keys `buildAccessScopedInclude` denied outright (issue
|
|
309
|
+
// #1087) were omitted from the select sent to Prisma, so `_count` may be
|
|
310
|
+
// absent from `workingItem` entirely, or present but missing exactly these
|
|
311
|
+
// keys. Write each denied key in as `0` — matching what a denied count has
|
|
312
|
+
// always meant for the admin list view's own scoped counts — unless a
|
|
313
|
+
// fragment's own selection excluded `_count` altogether, in which case
|
|
314
|
+
// there is nothing to inject it into.
|
|
315
|
+
if (countDenials.keys.size > 0 && !(selection?.fields && !selection.fields.has('_count'))) {
|
|
316
|
+
const existingCount = filtered._count && typeof filtered._count === 'object'
|
|
317
|
+
? filtered._count
|
|
318
|
+
: {};
|
|
319
|
+
const mergedCount = { ...existingCount };
|
|
320
|
+
for (const key of countDenials.keys) {
|
|
321
|
+
mergedCount[key] = 0;
|
|
322
|
+
}
|
|
323
|
+
filtered._count = mergedCount;
|
|
324
|
+
}
|
|
233
325
|
// The item a virtual field's hook sees: stored columns and fetched
|
|
234
326
|
// relations (from `workingItem`, never a resolved value — no hook's output
|
|
235
327
|
// is ever written back into `workingItem`). A key is visible here if it
|