@rhino-dev/rhino-nestjs 4.6.0 → 4.7.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/README.md +5 -2
- package/dist/controllers/global.controller.d.ts +39 -0
- package/dist/controllers/global.controller.js +121 -3
- package/dist/controllers/global.controller.js.map +1 -1
- package/dist/exporters/postman-exporter.js +34 -0
- package/dist/exporters/postman-exporter.js.map +1 -1
- package/dist/guards/resource-policy.guard.js +6 -0
- package/dist/guards/resource-policy.guard.js.map +1 -1
- package/dist/interfaces/rhino-config.interface.d.ts +51 -0
- package/dist/rhino.config.d.ts +28 -0
- package/dist/rhino.config.js +137 -0
- package/dist/rhino.config.js.map +1 -1
- package/dist/services/resource-scope.service.js +4 -2
- package/dist/services/resource-scope.service.js.map +1 -1
- package/dist/services/resource.service.d.ts +30 -1
- package/dist/services/resource.service.js +99 -19
- package/dist/services/resource.service.js.map +1 -1
- package/dist/services/serializer.service.d.ts +14 -0
- package/dist/services/serializer.service.js +38 -4
- package/dist/services/serializer.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/rhino.config.js
CHANGED
|
@@ -13,6 +13,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.RhinoConfigService = void 0;
|
|
16
|
+
exports.resolveOwnerOrgPaths = resolveOwnerOrgPaths;
|
|
16
17
|
exports.normalizeConfig = normalizeConfig;
|
|
17
18
|
const common_1 = require("@nestjs/common");
|
|
18
19
|
const tokens_1 = require("./constants/tokens");
|
|
@@ -23,8 +24,17 @@ const route_group_validator_1 = require("./utils/route-group-validator");
|
|
|
23
24
|
*/
|
|
24
25
|
let RhinoConfigService = class RhinoConfigService {
|
|
25
26
|
config;
|
|
27
|
+
/**
|
|
28
|
+
* slug → relation path to the org-scoped root for indirect-tenant models
|
|
29
|
+
* (`owner` chains), resolved ONCE at boot. `null` = no chain (direct
|
|
30
|
+
* `belongsToOrganization`, no `owner`, or an unresolvable chain — the latter
|
|
31
|
+
* warns at boot and keeps the model unscoped, matching the pre-`owner`
|
|
32
|
+
* behavior instead of bricking the app).
|
|
33
|
+
*/
|
|
34
|
+
orgPaths;
|
|
26
35
|
constructor(config) {
|
|
27
36
|
this.config = config;
|
|
37
|
+
this.orgPaths = resolveOwnerOrgPaths(this.models());
|
|
28
38
|
}
|
|
29
39
|
raw() {
|
|
30
40
|
return this.config;
|
|
@@ -115,6 +125,17 @@ let RhinoConfigService = class RhinoConfigService {
|
|
|
115
125
|
organizationIdentifierColumn() {
|
|
116
126
|
return this.config.multiTenant?.organizationIdentifierColumn ?? 'id';
|
|
117
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Relation path from an indirect-tenant model (`owner` chain) to its
|
|
130
|
+
* org-scoped root, e.g. `['task', 'project']` for
|
|
131
|
+
* comments → task → project(belongsToOrganization). `null` when the model is
|
|
132
|
+
* directly org-scoped, has no `owner`, or its chain could not be resolved
|
|
133
|
+
* (warned at boot). Consumers build the nested Prisma filter from this path:
|
|
134
|
+
* `{ task: { project: { organizationId } } }`.
|
|
135
|
+
*/
|
|
136
|
+
orgPathFor(slug) {
|
|
137
|
+
return this.orgPaths.get(slug) ?? null;
|
|
138
|
+
}
|
|
118
139
|
/** Global default route key (root `routeKey`), `'id'` when unset. */
|
|
119
140
|
globalRouteKey() {
|
|
120
141
|
return this.config.routeKey ?? 'id';
|
|
@@ -159,6 +180,122 @@ exports.RhinoConfigService = RhinoConfigService = __decorate([
|
|
|
159
180
|
__param(0, (0, common_1.Inject)(tokens_1.RHINO_CONFIG)),
|
|
160
181
|
__metadata("design:paramtypes", [Object])
|
|
161
182
|
], RhinoConfigService);
|
|
183
|
+
/** Max hops when following an `owner` chain to the org-scoped root. */
|
|
184
|
+
const OWNER_CHAIN_MAX_DEPTH = 10;
|
|
185
|
+
/** Split a (possibly dot-notated) `owner` value into relation segments. */
|
|
186
|
+
function ownerSegments(owner) {
|
|
187
|
+
if (typeof owner !== 'string')
|
|
188
|
+
return [];
|
|
189
|
+
return owner
|
|
190
|
+
.split('.')
|
|
191
|
+
.map((s) => s.trim())
|
|
192
|
+
.filter((s) => s.length > 0);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Find the registered model an `owner` segment points at. The segment is the
|
|
196
|
+
* Prisma RELATION FIELD NAME on the child model (e.g. `Task.owner: 'project'`
|
|
197
|
+
* → Prisma relation field `project`). Matching order:
|
|
198
|
+
*
|
|
199
|
+
* 1. Prisma model name, case-insensitive (`'project'` → model `'Project'`).
|
|
200
|
+
* 2. Registration slug, case-insensitive, with naive pluralization
|
|
201
|
+
* (`project` → `projects`, `category` → `categories`, `box` → `boxes`).
|
|
202
|
+
* 3. The same two lookups with a trailing `Id`/`_id` stripped, for legacy
|
|
203
|
+
* configs that stored the FK column (`'userId'`) instead of the relation.
|
|
204
|
+
*
|
|
205
|
+
* Returns the matched slug plus the relation field name to use in the Prisma
|
|
206
|
+
* path (the raw segment, or the stripped form when an `Id` suffix matched).
|
|
207
|
+
*/
|
|
208
|
+
function findOwnedRegistration(segment, models) {
|
|
209
|
+
const bySlugOrModel = (name) => {
|
|
210
|
+
const lower = name.toLowerCase();
|
|
211
|
+
for (const [slug, reg] of Object.entries(models)) {
|
|
212
|
+
if (String(reg.model).toLowerCase() === lower)
|
|
213
|
+
return slug;
|
|
214
|
+
}
|
|
215
|
+
const slugCandidates = [
|
|
216
|
+
lower,
|
|
217
|
+
`${lower}s`,
|
|
218
|
+
lower.endsWith('y') ? `${lower.slice(0, -1)}ies` : null,
|
|
219
|
+
`${lower}es`,
|
|
220
|
+
].filter((c) => c != null);
|
|
221
|
+
for (const candidate of slugCandidates) {
|
|
222
|
+
for (const slug of Object.keys(models)) {
|
|
223
|
+
if (slug.toLowerCase() === candidate)
|
|
224
|
+
return slug;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
};
|
|
229
|
+
const direct = bySlugOrModel(segment);
|
|
230
|
+
if (direct)
|
|
231
|
+
return { slug: direct, relation: segment };
|
|
232
|
+
// Legacy FK-column form: `userId` / `user_id` → relation `user`.
|
|
233
|
+
const stripped = segment.replace(/_?[iI]d$/, '');
|
|
234
|
+
if (stripped && stripped !== segment) {
|
|
235
|
+
const viaFk = bySlugOrModel(stripped);
|
|
236
|
+
if (viaFk)
|
|
237
|
+
return { slug: viaFk, relation: stripped };
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Resolve, for every registration with an `owner` chain, the relation path to
|
|
243
|
+
* its org-scoped root. Runs once at boot (RhinoConfigService construction).
|
|
244
|
+
*
|
|
245
|
+
* Failure policy: `owner` was previously inert at runtime, so a stale value
|
|
246
|
+
* must NOT throw — an unknown owner, a cycle, or a chain that never reaches a
|
|
247
|
+
* `belongsToOrganization` registration logs a console.warn and leaves the
|
|
248
|
+
* model unscoped (today's behavior). `belongsToOrganization: true` on the
|
|
249
|
+
* model itself wins over `owner` (direct scoping, no path, no warning).
|
|
250
|
+
*/
|
|
251
|
+
function resolveOwnerOrgPaths(models) {
|
|
252
|
+
const warn = (slug, reason) =>
|
|
253
|
+
// eslint-disable-next-line no-console
|
|
254
|
+
console.warn(`[Rhino] Model '${slug}': owner chain could not be resolved (${reason}). ` +
|
|
255
|
+
`The model will NOT be organization-scoped — records are visible across tenants. ` +
|
|
256
|
+
`Fix the 'owner' value (the Prisma relation field pointing at the owning model) to enable scoping.`);
|
|
257
|
+
const resolve = (slug) => {
|
|
258
|
+
const path = [];
|
|
259
|
+
const visited = new Set([slug]);
|
|
260
|
+
let segments = ownerSegments(models[slug].owner);
|
|
261
|
+
let currentSlug = slug;
|
|
262
|
+
for (let depth = 0; depth < OWNER_CHAIN_MAX_DEPTH; depth++) {
|
|
263
|
+
const segment = segments.shift();
|
|
264
|
+
if (segment === undefined) {
|
|
265
|
+
warn(slug, `chain dead-ends at '${currentSlug}', which neither belongs to an organization nor declares an owner`);
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
const owned = findOwnedRegistration(segment, models);
|
|
269
|
+
if (!owned) {
|
|
270
|
+
warn(slug, `owner '${segment}' does not name a registered model`);
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
path.push(owned.relation);
|
|
274
|
+
const ownedReg = models[owned.slug];
|
|
275
|
+
if (ownedReg.belongsToOrganization)
|
|
276
|
+
return path;
|
|
277
|
+
if (visited.has(owned.slug)) {
|
|
278
|
+
warn(slug, `cycle detected at '${owned.slug}'`);
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
visited.add(owned.slug);
|
|
282
|
+
currentSlug = owned.slug;
|
|
283
|
+
if (segments.length === 0)
|
|
284
|
+
segments = ownerSegments(ownedReg.owner);
|
|
285
|
+
}
|
|
286
|
+
warn(slug, `chain exceeds the maximum depth of ${OWNER_CHAIN_MAX_DEPTH}`);
|
|
287
|
+
return null;
|
|
288
|
+
};
|
|
289
|
+
const out = new Map();
|
|
290
|
+
for (const [slug, reg] of Object.entries(models)) {
|
|
291
|
+
if (!reg.owner || reg.belongsToOrganization) {
|
|
292
|
+
out.set(slug, null);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
out.set(slug, resolve(slug));
|
|
296
|
+
}
|
|
297
|
+
return out;
|
|
298
|
+
}
|
|
162
299
|
/**
|
|
163
300
|
* Normalize a raw config value (defaults applied) — used by the module in forRoot.
|
|
164
301
|
*/
|
package/dist/rhino.config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rhino.config.js","sourceRoot":"","sources":["../src/rhino.config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"rhino.config.js","sourceRoot":"","sources":["../src/rhino.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,8 +53,10 @@ let ResourceScopeService = class ResourceScopeService extends resource_service_1
|
|
|
53
53
|
throw new Error(`Unknown model: ${modelSlug}`);
|
|
54
54
|
// Fail CLOSED: a tenant-scoped model queried with no org context must NOT
|
|
55
55
|
// silently degrade to an unscoped (cross-tenant) query. Contrast findAll,
|
|
56
|
-
// whose orgFilter simply returns null.
|
|
57
|
-
|
|
56
|
+
// whose orgFilter simply returns null. Applies equally to indirect-tenant
|
|
57
|
+
// models scoped through a resolved `owner` chain (orgPathFor).
|
|
58
|
+
const tenantScoped = reg.belongsToOrganization || this.config.orgPathFor(modelSlug) != null;
|
|
59
|
+
if (tenantScoped && !ctx.organization) {
|
|
58
60
|
throw rhino_exception_1.RhinoException.tenantContextRequired(`Rhino resource scope for '${modelSlug}' requires an organization context`);
|
|
59
61
|
}
|
|
60
62
|
let where = this.orgFilter(modelSlug, ctx.organization) ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-scope.service.js","sourceRoot":"","sources":["../../src/services/resource-scope.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AACtD,6DAAyD;AACzD,kDAAqD;AACrD,mEAA8D;AAC9D,mDAA+C;AAC/C,yDAAsE;AACtE,oEAAkE;AAClE,+DAA2D;AAO3D;;;;;;;;;;;;;;GAcG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,kCAAe;IACvD,YACE,MAAqB,EACrB,MAA0B,EAC1B,YAAiC,EACrB,MAAqB;QAEjC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CACT,SAAiB,EACjB,MAAuB,EAAE,EACzB,OAA2B,EAAE;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;QAEzD,0EAA0E;QAC1E,0EAA0E;QAC1E,
|
|
1
|
+
{"version":3,"file":"resource-scope.service.js","sourceRoot":"","sources":["../../src/services/resource-scope.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AACtD,6DAAyD;AACzD,kDAAqD;AACrD,mEAA8D;AAC9D,mDAA+C;AAC/C,yDAAsE;AACtE,oEAAkE;AAClE,+DAA2D;AAO3D;;;;;;;;;;;;;;GAcG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,kCAAe;IACvD,YACE,MAAqB,EACrB,MAA0B,EAC1B,YAAiC,EACrB,MAAqB;QAEjC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CACT,SAAiB,EACjB,MAAuB,EAAE,EACzB,OAA2B,EAAE;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;QAEzD,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,+DAA+D;QAC/D,MAAM,YAAY,GAChB,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QACzE,IAAI,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,gCAAc,CAAC,qBAAqB,CACxC,6BAA6B,SAAS,oCAAoC,CAC3E,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,GAAwB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACnF,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAEhD,wEAAwE;QACxE,6EAA6E;QAC7E,yEAAyE;QACzE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,gCAAc,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC;YAC9E,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;gBAC1D,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,QAAQ,EAAE,IAAA,wCAAmB,EAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACK,OAAO,CACb,SAAiB,EACjB,GAAoB,EACpB,IAAwB,EACxB,UAAgC;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QACvE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,8EAA8E;IAC9E,QAAQ,CAAC,SAAiB;QACxB,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,2EAA2E;IAC3E,KAAK,CACH,SAAiB,EACjB,MAAuB,EAAE,EACzB,UAAgC,EAChC,OAA2B,EAAE;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,iEAAiE;IACjE,QAAQ,CACN,SAAiB,EACjB,MAAuB,EAAE,EACzB,OAA4B,EAAE,EAC9B,OAA2B,EAAE;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,kEAAkE;IAClE,SAAS,CACP,SAAiB,EACjB,MAAuB,EAAE,EACzB,OAA4B,EAAE,EAC9B,OAA2B,EAAE;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,gEAAgE;IAChE,OAAO,CACL,SAAiB,EACjB,MAAuB,EAAE,EACzB,OAA4B,EAAE,EAC9B,OAA2B,EAAE;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AAxHY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCAHH,8BAAa;QACb,iCAAkB;QACZ,2CAAmB;QACZ,4BAAY;GALxB,oBAAoB,CAwHhC"}
|
|
@@ -34,9 +34,38 @@ export declare class ResourceService {
|
|
|
34
34
|
protected idWhere(modelSlug: string, id: string | number, hasUuid?: boolean): Record<string, any>;
|
|
35
35
|
/** Whether the model resolves its `:id` segment via a non-PK route key. */
|
|
36
36
|
protected hasCustomRouteKey(modelSlug: string): boolean;
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Resolve Prisma where filter for the current org context.
|
|
39
|
+
*
|
|
40
|
+
* - `belongsToOrganization` → direct `{ organizationId }` (unchanged).
|
|
41
|
+
* - `owner` chain (indirect tenancy resolved at boot by
|
|
42
|
+
* `RhinoConfigService.orgPathFor`) → nested relation filter, e.g.
|
|
43
|
+
* comments → `{ task: { project: { organizationId } } }`.
|
|
44
|
+
* - Neither (or unresolvable chain) → null (unscoped, legacy behavior).
|
|
45
|
+
*/
|
|
38
46
|
protected orgFilter(modelSlug: string, org?: any): Record<string, any> | null;
|
|
47
|
+
/**
|
|
48
|
+
* Compose an org-scope fragment into a where with AND semantics. Plain
|
|
49
|
+
* `Object.assign` is kept for the common no-collision case (byte-identical
|
|
50
|
+
* Prisma args to the legacy behavior); when the where already constrains one
|
|
51
|
+
* of the org-scope keys (e.g. a client filter on the owning relation), the
|
|
52
|
+
* two are AND-wrapped so BOTH always apply — the tenant filter can never be
|
|
53
|
+
* overwritten, and it can never silently drop the caller's constraint.
|
|
54
|
+
*/
|
|
55
|
+
protected withOrgScope(where: Record<string, any>, orgScope: Record<string, any> | null): Record<string, any>;
|
|
39
56
|
findAll(modelSlug: string, rawQuery: Record<string, any>, ctx?: ResourceContext): Promise<FindAllResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Evaluate collection-level computed attributes.
|
|
59
|
+
*
|
|
60
|
+
* The where filter handed to each callable has the organization scope, the
|
|
61
|
+
* model's scopes, `?scope=`, `?filter[]=` and `?search=` already applied — so
|
|
62
|
+
* the numbers describe exactly the set `findAll` would have returned. Sorting,
|
|
63
|
+
* sparse fieldsets, includes and pagination are deliberately NOT applied.
|
|
64
|
+
*
|
|
65
|
+
* Each callable receives its own shallow copy of the where object so one
|
|
66
|
+
* attribute's mutations can never leak into the next one's result.
|
|
67
|
+
*/
|
|
68
|
+
computeCollectionAttributes(modelSlug: string, rawQuery: Record<string, any>, names: string[], ctx?: ResourceContext): Promise<Record<string, any>>;
|
|
40
69
|
findOne(modelSlug: string, id: string | number, rawQuery: Record<string, any>, ctx?: ResourceContext): Promise<any>;
|
|
41
70
|
create(modelSlug: string, data: Record<string, any>, ctx?: ResourceContext): Promise<any>;
|
|
42
71
|
update(modelSlug: string, id: string | number, data: Record<string, any>, ctx?: ResourceContext): Promise<any>;
|
|
@@ -66,14 +66,47 @@ let ResourceService = class ResourceService {
|
|
|
66
66
|
hasCustomRouteKey(modelSlug) {
|
|
67
67
|
return this.config.routeKeyFor(modelSlug) !== 'id';
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Resolve Prisma where filter for the current org context.
|
|
71
|
+
*
|
|
72
|
+
* - `belongsToOrganization` → direct `{ organizationId }` (unchanged).
|
|
73
|
+
* - `owner` chain (indirect tenancy resolved at boot by
|
|
74
|
+
* `RhinoConfigService.orgPathFor`) → nested relation filter, e.g.
|
|
75
|
+
* comments → `{ task: { project: { organizationId } } }`.
|
|
76
|
+
* - Neither (or unresolvable chain) → null (unscoped, legacy behavior).
|
|
77
|
+
*/
|
|
70
78
|
orgFilter(modelSlug, org) {
|
|
71
79
|
if (!org)
|
|
72
80
|
return null;
|
|
73
81
|
const reg = this.config.model(modelSlug);
|
|
74
|
-
if (!reg
|
|
82
|
+
if (!reg)
|
|
75
83
|
return null;
|
|
76
|
-
|
|
84
|
+
if (reg.belongsToOrganization)
|
|
85
|
+
return { organizationId: org.id };
|
|
86
|
+
const path = this.config.orgPathFor(modelSlug);
|
|
87
|
+
if (!path || path.length === 0)
|
|
88
|
+
return null;
|
|
89
|
+
let filter = { organizationId: org.id };
|
|
90
|
+
for (let i = path.length - 1; i >= 0; i--) {
|
|
91
|
+
filter = { [path[i]]: filter };
|
|
92
|
+
}
|
|
93
|
+
return filter;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Compose an org-scope fragment into a where with AND semantics. Plain
|
|
97
|
+
* `Object.assign` is kept for the common no-collision case (byte-identical
|
|
98
|
+
* Prisma args to the legacy behavior); when the where already constrains one
|
|
99
|
+
* of the org-scope keys (e.g. a client filter on the owning relation), the
|
|
100
|
+
* two are AND-wrapped so BOTH always apply — the tenant filter can never be
|
|
101
|
+
* overwritten, and it can never silently drop the caller's constraint.
|
|
102
|
+
*/
|
|
103
|
+
withOrgScope(where, orgScope) {
|
|
104
|
+
if (!orgScope)
|
|
105
|
+
return where;
|
|
106
|
+
const collides = Object.keys(orgScope).some((k) => Object.prototype.hasOwnProperty.call(where, k));
|
|
107
|
+
if (collides)
|
|
108
|
+
return { AND: [where, orgScope] };
|
|
109
|
+
return Object.assign(where, orgScope);
|
|
77
110
|
}
|
|
78
111
|
async findAll(modelSlug, rawQuery, ctx = {}) {
|
|
79
112
|
const reg = this.config.model(modelSlug);
|
|
@@ -81,7 +114,7 @@ let ResourceService = class ResourceService {
|
|
|
81
114
|
throw new Error(`Unknown model: ${modelSlug}`);
|
|
82
115
|
const delegate = this.delegate(modelSlug);
|
|
83
116
|
const parsed = this.queryBuilder.build(rawQuery, reg, { namedScopes: true });
|
|
84
|
-
let where = this.mergeWhere(parsed.where, this.orgFilter(modelSlug, ctx.organization));
|
|
117
|
+
let where = this.withOrgScope(this.mergeWhere(parsed.where), this.orgFilter(modelSlug, ctx.organization));
|
|
85
118
|
where = this.applyScopes(where, modelSlug, ctx);
|
|
86
119
|
// Apply the validated client-selectable named scope (index/trashed only).
|
|
87
120
|
// ScopeService is @Optional() — fail CLOSED if it was never wired in.
|
|
@@ -136,6 +169,59 @@ let ResourceService = class ResourceService {
|
|
|
136
169
|
});
|
|
137
170
|
return { items };
|
|
138
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Evaluate collection-level computed attributes.
|
|
174
|
+
*
|
|
175
|
+
* The where filter handed to each callable has the organization scope, the
|
|
176
|
+
* model's scopes, `?scope=`, `?filter[]=` and `?search=` already applied — so
|
|
177
|
+
* the numbers describe exactly the set `findAll` would have returned. Sorting,
|
|
178
|
+
* sparse fieldsets, includes and pagination are deliberately NOT applied.
|
|
179
|
+
*
|
|
180
|
+
* Each callable receives its own shallow copy of the where object so one
|
|
181
|
+
* attribute's mutations can never leak into the next one's result.
|
|
182
|
+
*/
|
|
183
|
+
async computeCollectionAttributes(modelSlug, rawQuery, names, ctx = {}) {
|
|
184
|
+
const reg = this.config.model(modelSlug);
|
|
185
|
+
if (!reg)
|
|
186
|
+
throw new Error(`Unknown model: ${modelSlug}`);
|
|
187
|
+
const delegate = this.delegate(modelSlug);
|
|
188
|
+
const declared = reg.collectionComputedAttributes ?? {};
|
|
189
|
+
const parsed = this.queryBuilder.build(rawQuery, reg, { namedScopes: true });
|
|
190
|
+
let where = this.withOrgScope(this.mergeWhere(parsed.where), this.orgFilter(modelSlug, ctx.organization));
|
|
191
|
+
where = this.applyScopes(where, modelSlug, ctx);
|
|
192
|
+
// Apply the validated client-selectable named scope, exactly as findAll does.
|
|
193
|
+
// ScopeService is @Optional() — fail CLOSED if it was never wired in.
|
|
194
|
+
if (parsed.scopeName) {
|
|
195
|
+
if (!this.scopes) {
|
|
196
|
+
throw rhino_exception_1.RhinoException.forbidden(`Scope '${parsed.scopeName}' is not allowed`);
|
|
197
|
+
}
|
|
198
|
+
where = this.scopes.applyNamed(parsed.scopeName, where, reg, {
|
|
199
|
+
user: ctx.user,
|
|
200
|
+
organization: ctx.organization,
|
|
201
|
+
userRole: (0, permission_matcher_1.resolveUserRoleSlug)(ctx.user, ctx.organization?.id),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (reg.softDeletes && !ctx.includeTrashed) {
|
|
205
|
+
where.deletedAt = null;
|
|
206
|
+
}
|
|
207
|
+
const out = {};
|
|
208
|
+
for (const name of names) {
|
|
209
|
+
const entry = declared[name];
|
|
210
|
+
if (typeof entry !== 'function') {
|
|
211
|
+
out[name] = entry;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
out[name] = await entry({
|
|
215
|
+
where: { ...where },
|
|
216
|
+
delegate,
|
|
217
|
+
prisma: this.prisma.client,
|
|
218
|
+
user: ctx.user,
|
|
219
|
+
organization: ctx.organization,
|
|
220
|
+
modelSlug,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
139
225
|
async findOne(modelSlug, id, rawQuery, ctx = {}) {
|
|
140
226
|
const reg = this.config.model(modelSlug);
|
|
141
227
|
if (!reg)
|
|
@@ -143,9 +229,7 @@ let ResourceService = class ResourceService {
|
|
|
143
229
|
const delegate = this.delegate(modelSlug);
|
|
144
230
|
const parsed = this.queryBuilder.build(rawQuery, reg);
|
|
145
231
|
let where = this.idWhere(modelSlug, id, reg.hasUuid);
|
|
146
|
-
|
|
147
|
-
if (orgScope)
|
|
148
|
-
Object.assign(where, orgScope);
|
|
232
|
+
where = this.withOrgScope(where, this.orgFilter(modelSlug, ctx.organization));
|
|
149
233
|
where = this.applyScopes(where, modelSlug, ctx);
|
|
150
234
|
if (reg.softDeletes && !ctx.includeTrashed)
|
|
151
235
|
where.deletedAt = null;
|
|
@@ -167,10 +251,9 @@ let ResourceService = class ResourceService {
|
|
|
167
251
|
if (!reg)
|
|
168
252
|
throw new Error(`Unknown model: ${modelSlug}`);
|
|
169
253
|
const delegate = this.delegate(modelSlug);
|
|
170
|
-
|
|
254
|
+
let where = this.idWhere(modelSlug, id, reg.hasUuid);
|
|
171
255
|
const orgScope = this.orgFilter(modelSlug, ctx.organization);
|
|
172
|
-
|
|
173
|
-
Object.assign(where, orgScope);
|
|
256
|
+
where = this.withOrgScope(where, orgScope);
|
|
174
257
|
// Reject attempts to change organizationId silently
|
|
175
258
|
const payload = { ...data };
|
|
176
259
|
delete payload.organizationId;
|
|
@@ -198,10 +281,9 @@ let ResourceService = class ResourceService {
|
|
|
198
281
|
if (!reg)
|
|
199
282
|
throw new Error(`Unknown model: ${modelSlug}`);
|
|
200
283
|
const delegate = this.delegate(modelSlug);
|
|
201
|
-
|
|
284
|
+
let where = this.idWhere(modelSlug, id, reg.hasUuid);
|
|
202
285
|
const orgScope = this.orgFilter(modelSlug, ctx.organization);
|
|
203
|
-
|
|
204
|
-
Object.assign(where, orgScope);
|
|
286
|
+
where = this.withOrgScope(where, orgScope);
|
|
205
287
|
if (reg.softDeletes) {
|
|
206
288
|
const res = await delegate.updateMany({ where, data: { deletedAt: new Date() } });
|
|
207
289
|
return res.count > 0;
|
|
@@ -227,10 +309,9 @@ let ResourceService = class ResourceService {
|
|
|
227
309
|
if (!reg?.softDeletes)
|
|
228
310
|
throw new Error(`Model ${modelSlug} does not support soft deletes`);
|
|
229
311
|
const delegate = this.delegate(modelSlug);
|
|
230
|
-
|
|
312
|
+
let where = this.idWhere(modelSlug, id, reg.hasUuid);
|
|
231
313
|
const orgScope = this.orgFilter(modelSlug, ctx.organization);
|
|
232
|
-
|
|
233
|
-
Object.assign(where, orgScope);
|
|
314
|
+
where = this.withOrgScope(where, orgScope);
|
|
234
315
|
const res = await delegate.updateMany({ where, data: { deletedAt: null } });
|
|
235
316
|
return res.count > 0;
|
|
236
317
|
}
|
|
@@ -239,10 +320,9 @@ let ResourceService = class ResourceService {
|
|
|
239
320
|
if (!reg)
|
|
240
321
|
throw new Error(`Unknown model: ${modelSlug}`);
|
|
241
322
|
const delegate = this.delegate(modelSlug);
|
|
242
|
-
|
|
323
|
+
let where = this.idWhere(modelSlug, id, reg.hasUuid);
|
|
243
324
|
const orgScope = this.orgFilter(modelSlug, ctx.organization);
|
|
244
|
-
|
|
245
|
-
Object.assign(where, orgScope);
|
|
325
|
+
where = this.withOrgScope(where, orgScope);
|
|
246
326
|
if (orgScope) {
|
|
247
327
|
const res = await delegate.deleteMany({ where });
|
|
248
328
|
return res.count > 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.service.js","sourceRoot":"","sources":["../../src/services/resource.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource.service.js","sourceRoot":"","sources":["../../src/services/resource.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,12 @@ export declare const BASE_HIDDEN_COLUMNS: string[];
|
|
|
13
13
|
export interface SerializeContext {
|
|
14
14
|
user?: any;
|
|
15
15
|
organization?: any;
|
|
16
|
+
/**
|
|
17
|
+
* OPT-IN record-level computed attributes selected by the client via
|
|
18
|
+
* `?computed_attributes=`. Only these names are evaluated; anything else
|
|
19
|
+
* declared in `recordComputedAttributes` stays untouched.
|
|
20
|
+
*/
|
|
21
|
+
computedAttributes?: string[];
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
18
24
|
* Serializes a record according to the Laravel `asRhinoJson` contract:
|
|
@@ -42,5 +48,13 @@ export declare class SerializerService {
|
|
|
42
48
|
*/
|
|
43
49
|
serializeOne(record: Record<string, any> | null | undefined, reg: ModelRegistration, ctx?: SerializeContext | any): Record<string, any> | null;
|
|
44
50
|
serializeMany(records: any[], reg: ModelRegistration, ctx?: SerializeContext | any): any[];
|
|
51
|
+
/**
|
|
52
|
+
* Evaluate the selected opt-in record-level computed attributes.
|
|
53
|
+
*
|
|
54
|
+
* Names that are not declared are silently skipped — the controller has
|
|
55
|
+
* already rejected unknown/forbidden names with a 403, and a direct
|
|
56
|
+
* serializer caller must not be able to force an arbitrary call.
|
|
57
|
+
*/
|
|
58
|
+
private resolveRecordComputed;
|
|
45
59
|
private normalizeCtx;
|
|
46
60
|
}
|
|
@@ -63,11 +63,15 @@ let SerializerService = class SerializerService {
|
|
|
63
63
|
serializeOne(record, reg, ctx) {
|
|
64
64
|
if (!record)
|
|
65
65
|
return record;
|
|
66
|
-
const { user, organization } = this.normalizeCtx(ctx);
|
|
66
|
+
const { user, organization, computedAttributes } = this.normalizeCtx(ctx);
|
|
67
67
|
let result = { ...record };
|
|
68
68
|
if (reg.computedAttributes) {
|
|
69
69
|
Object.assign(result, reg.computedAttributes(record, user));
|
|
70
70
|
}
|
|
71
|
+
// Merge the OPT-IN record-level computed attributes the client selected.
|
|
72
|
+
// Nothing is evaluated unless it was asked for by name. Merged BEFORE
|
|
73
|
+
// policy filtering, so the blacklist/whitelist below still govern them.
|
|
74
|
+
Object.assign(result, this.resolveRecordComputed(record, reg, computedAttributes, user));
|
|
71
75
|
for (const col of exports.BASE_HIDDEN_COLUMNS) {
|
|
72
76
|
delete result[col];
|
|
73
77
|
}
|
|
@@ -96,10 +100,40 @@ let SerializerService = class SerializerService {
|
|
|
96
100
|
serializeMany(records, reg, ctx) {
|
|
97
101
|
return records.map((r) => this.serializeOne(r, reg, ctx));
|
|
98
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Evaluate the selected opt-in record-level computed attributes.
|
|
105
|
+
*
|
|
106
|
+
* Names that are not declared are silently skipped — the controller has
|
|
107
|
+
* already rejected unknown/forbidden names with a 403, and a direct
|
|
108
|
+
* serializer caller must not be able to force an arbitrary call.
|
|
109
|
+
*/
|
|
110
|
+
resolveRecordComputed(record, reg, names, user) {
|
|
111
|
+
if (!names || names.length === 0)
|
|
112
|
+
return {};
|
|
113
|
+
const declared = reg.recordComputedAttributes;
|
|
114
|
+
if (!declared)
|
|
115
|
+
return {};
|
|
116
|
+
const out = {};
|
|
117
|
+
for (const name of names) {
|
|
118
|
+
if (typeof name !== 'string')
|
|
119
|
+
continue;
|
|
120
|
+
if (!Object.prototype.hasOwnProperty.call(declared, name))
|
|
121
|
+
continue;
|
|
122
|
+
const entry = declared[name];
|
|
123
|
+
out[name] = typeof entry === 'function' ? entry(record, user) : entry;
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
99
127
|
normalizeCtx(ctx) {
|
|
100
|
-
// New call shape: { user, organization }
|
|
101
|
-
if (ctx &&
|
|
102
|
-
|
|
128
|
+
// New call shape: { user, organization, computedAttributes }
|
|
129
|
+
if (ctx &&
|
|
130
|
+
typeof ctx === 'object' &&
|
|
131
|
+
('user' in ctx || 'organization' in ctx || 'computedAttributes' in ctx)) {
|
|
132
|
+
return {
|
|
133
|
+
user: ctx.user,
|
|
134
|
+
organization: ctx.organization,
|
|
135
|
+
computedAttributes: ctx.computedAttributes,
|
|
136
|
+
};
|
|
103
137
|
}
|
|
104
138
|
// Legacy call shape: a bare user (or null/undefined)
|
|
105
139
|
return { user: ctx, organization: undefined };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.service.js","sourceRoot":"","sources":["../../src/services/serializer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AAEtD,kDAAqD;AAExC,QAAA,mBAAmB,GAAG;IACjC,UAAU;IACV,eAAe;IACf,gBAAgB;IAChB,sBAAsB;IACtB,wBAAwB;IACxB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,mBAAmB;CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"serializer.service.js","sourceRoot":"","sources":["../../src/services/serializer.service.ts"],"names":[],"mappings":"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"}
|