@rhino-dev/rhino-nestjs 4.7.3 → 4.8.1

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 CHANGED
@@ -158,7 +158,7 @@ That's it. You now have a full REST API for posts:
158
158
  | 2 | **Authentication** | Login, logout, password recovery/reset, invitation-based registration via JWT. |
159
159
  | 3 | **Authorization & Policies** | Convention-based permission checks (`{slug}.{action}`), wildcard support. |
160
160
  | 4 | **Role-Based Access Control** | Per-org roles via `user_roles` pivot table. |
161
- | 5 | **Attribute-Level Permissions** | Control which fields each role can read and write. |
161
+ | 5 | **Attribute-Level Permissions** | Control which fields each role can read and write. A field a role cannot read is also refused as a `?filter[]` or a `?sort`, and skipped by `?search=`. |
162
162
  | 6 | **Validation** | Zod schemas with role-keyed rules. Store and update schemas are independent. |
163
163
  | 7 | **Cross-Tenant FK Validation** | Organization-id is automatically stripped from user input; org always comes from middleware. |
164
164
  | 8 | **Filtering** | `?filter[field]=value` with comma-separated OR values. |
@@ -184,7 +184,7 @@ That's it. You now have a full REST API for posts:
184
184
  | 28 | **Blueprint System** | YAML-to-code generation for models, migrations, policies, tests, and seeders. |
185
185
  | 29 | **Group Membership** | Opt-in `auth.enforceGroupMembership` makes a route group an access boundary. Memberships are keyed by `(user, route_group, organization, role)` on `user_roles`; a NULL `route_group` is a wildcard. No match → 403, enforced both at `/auth/login` (non-members can't sign in) and on every resource request. Permissions then resolve from the matched membership row. |
186
186
  | 30 | **Group-Aware Auth & Lifecycle Hooks** | Per-group `auth: true` registers the auth route set under the group; per-group `hooks` (a provider implementing `AuthLifecycleHooks`) run `afterLogin/afterLogout/afterRegister/afterPasswordRecover/afterPasswordReset` and may reject (revoking the issued token). Invitations carry the `route_group`; accept populates the membership. See [Group-auth hooks & token revocation](#group-auth-hooks--token-revocation). |
187
- | 31 | **Named Scopes** | Client-selectable `?scope=<key>` on index/trashed. Only keys declared in `namedScopes` are callable (own-property check — prototype keys like `constructor` are rejected with 403); each scope returns a Prisma where-fragment that Rhino **ANDs** into the query, so it can never drop the org/filter/search/soft-delete constraints. `defaultScope` (validated at boot to be a declared key) applies when no `?scope` is sent. `show`/`update`/`destroy` prefetch stay unscoped. Fails closed (403) on an unknown name or a missing `ScopeService`. |
187
+ | 31 | **Named Scopes** | Client-selectable `?scope=<key>` on index/trashed. Only keys declared in `namedScopes` are callable (own-property check — prototype keys like `constructor` are rejected with 403); each scope returns a Prisma where-fragment that Rhino **ANDs** into the query, so it can never drop the org/filter/search/soft-delete constraints. A scope class may declare `static params` so the client can fill them in with `?scope[key][param]=value`, and up to three scopes may be combined, applied in URL order. The policy's `permittedScopes()` narrows which keys this user may pick. `defaultScope` (validated at boot to be a declared key) applies when no `?scope` is sent. `show`/`update`/`destroy` prefetch stay unscoped. Fails closed (403) on an unknown name or a missing `ScopeService`. |
188
188
  | 32 | **Configurable Route Key** | Choose which column matches the `:id` URL segment on member endpoints (show/update/destroy/restore/force-delete), e.g. `routeKey: 'hashId'` → `GET /api/jobs/{hash_id}`. Per-model `routeKey` beats the root config's `routeKey`; default is the primary key `id` (unchanged behavior). With a custom key the param is always treated as a string (a digit-only hash is never numified), whitelisted/`?fields` responses always keep the route-key column, and lookups stay tenant-scoped. Nested operations, FK validation, and org resolution remain primary-key based. Also available as `@RouteKey('hashId')` and blueprint `options.route_key`. |
189
189
 
190
190
  ### Group-auth hooks & token revocation
@@ -0,0 +1,12 @@
1
+ /**
2
+ * How many client-selectable named scopes one request may combine when the app
3
+ * sets no `maxScopesPerRequest`.
4
+ *
5
+ * Lives here rather than next to the query builder on purpose: `RhinoConfigService`
6
+ * needs it, and importing it from the query builder would make `rhino.config.ts`
7
+ * and `query-builder.service.ts` import each other. That cycle leaves
8
+ * `RhinoConfigService` undefined while the query builder's decorators run, so
9
+ * Nest sees no constructor type and injects nothing — the service silently loses
10
+ * its config.
11
+ */
12
+ export declare const DEFAULT_MAX_SCOPES_PER_REQUEST = 3;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_MAX_SCOPES_PER_REQUEST = void 0;
4
+ /**
5
+ * How many client-selectable named scopes one request may combine when the app
6
+ * sets no `maxScopesPerRequest`.
7
+ *
8
+ * Lives here rather than next to the query builder on purpose: `RhinoConfigService`
9
+ * needs it, and importing it from the query builder would make `rhino.config.ts`
10
+ * and `query-builder.service.ts` import each other. That cycle leaves
11
+ * `RhinoConfigService` undefined while the query builder's decorators run, so
12
+ * Nest sees no constructor type and injects nothing — the service silently loses
13
+ * its config.
14
+ */
15
+ exports.DEFAULT_MAX_SCOPES_PER_REQUEST = 3;
16
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACU,QAAA,8BAA8B,GAAG,CAAC,CAAC"}
@@ -95,6 +95,23 @@ export interface ModelRegistration {
95
95
  * Client-selectable named scopes for ?scope=<key>. Only declared keys are
96
96
  * callable. Each scope returns a Prisma where-fragment that Rhino ANDs into
97
97
  * the query for index/trashed only.
98
+ *
99
+ * A scope may declare parameters the client fills in, as statics on the class:
100
+ *
101
+ * class WindowScope implements RhinoNamedScope {
102
+ * static params = ['from', 'to'];
103
+ * static optionalParams = ['to'];
104
+ * apply(ctx: ScopeContext) { ... ctx.args.from ... }
105
+ * }
106
+ *
107
+ * Queries:
108
+ * GET /api/routes?scope=archived
109
+ * GET /api/routes?scope[since]=2026-01-01
110
+ * GET /api/routes?scope[window][from]=a&scope[window][to]=b
111
+ *
112
+ * Up to three scopes may be combined in the bracket form, applied in the
113
+ * order the URL lists them. A scope that declares no parameters never
114
+ * receives client input: sending any is a 403.
98
115
  */
99
116
  namedScopes?: Record<string, Type<RhinoNamedScope>>;
100
117
  /** Key of namedScopes applied when no ?scope param is sent. */
@@ -233,6 +250,15 @@ export interface RhinoConfig {
233
250
  * used (byte-identical to previous behavior).
234
251
  */
235
252
  routeKey?: string;
253
+ /**
254
+ * How many client-selectable named scopes one request may combine with the
255
+ * bracket form (`?scope[a]=&scope[b][x]=1`). Each scope is an arbitrary
256
+ * where-fragment that may add relation filters of its own, so the number is
257
+ * capped: a request over the cap is refused with 403 `Too many scopes
258
+ * requested`. Defaults to 3 — a base scope, a window, and one more predicate.
259
+ * A non-positive value falls back to the default.
260
+ */
261
+ maxScopesPerRequest?: number;
236
262
  routeGroups?: Record<string, RouteGroupConfig>;
237
263
  multiTenant?: MultiTenantConfig;
238
264
  nested?: NestedConfig;
@@ -18,6 +18,15 @@ export declare class ResourcePolicy {
18
18
  forceDelete(user: any, _model: any, organization?: any): boolean;
19
19
  permittedAttributesForShow(_user: any, _org?: any): string[];
20
20
  hiddenAttributesForShow(_user: any, _org?: any): string[];
21
+ /**
22
+ * Named scopes this user may select with `?scope=`. Return `['*']` to allow
23
+ * every scope the model declares in `namedScopes` (default). The model's
24
+ * declaration still applies: this can only narrow it.
25
+ *
26
+ * The model's `defaultScope` is applied by the server when the client sends
27
+ * no scope at all, so it is not subject to this list. Requesting it by name is.
28
+ */
29
+ permittedScopes(_user: any, _org?: any): string[];
21
30
  permittedAttributesForCreate(_user: any, _org?: any): string[];
22
31
  permittedAttributesForUpdate(_user: any, _org?: any): string[];
23
32
  protected checkPermission(user: any, action: string, organization?: any): boolean;
@@ -49,6 +49,18 @@ class ResourcePolicy {
49
49
  hiddenAttributesForShow(_user, _org) {
50
50
  return [];
51
51
  }
52
+ // ---------------- Scope permissions ----------------
53
+ /**
54
+ * Named scopes this user may select with `?scope=`. Return `['*']` to allow
55
+ * every scope the model declares in `namedScopes` (default). The model's
56
+ * declaration still applies: this can only narrow it.
57
+ *
58
+ * The model's `defaultScope` is applied by the server when the client sends
59
+ * no scope at all, so it is not subject to this list. Requesting it by name is.
60
+ */
61
+ permittedScopes(_user, _org) {
62
+ return ['*'];
63
+ }
52
64
  permittedAttributesForCreate(_user, _org) {
53
65
  return ['*'];
54
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resource-policy.js","sourceRoot":"","sources":["../../src/policies/resource-policy.ts"],"names":[],"mappings":";;;AAAA,oEAAqF;AAErF;;;GAGG;AACH,MAAa,cAAc;IACzB;;;OAGG;IACH,YAAY,CAAU;IAEtB,yCAAyC;IACzC,OAAO,CAAC,IAAS,EAAE,YAAkB;QACnC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,IAAS,EAAE,MAAW,EAAE,YAAkB;QAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,CAAC,IAAS,EAAE,YAAkB;QAClC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,IAAS,EAAE,MAAW,EAAE,YAAkB;QAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,CAAC,IAAS,EAAE,MAAW,EAAE,YAAkB;QAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,gDAAgD;IAChD,WAAW,CAAC,IAAS,EAAE,YAAkB;QACvC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,IAAS,EAAE,MAAW,EAAE,YAAkB;QAChD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IACD,WAAW,CAAC,IAAS,EAAE,MAAW,EAAE,YAAkB;QACpD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,0DAA0D;IAC1D,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,2BAA2B;IAC3B,0BAA0B,CAAC,KAAU,EAAE,IAAU;QAC/C,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,uBAAuB,CAAC,KAAU,EAAE,IAAU;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,4BAA4B,CAAC,KAAU,EAAE,IAAU;QACjD,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,4BAA4B,CAAC,KAAU,EAAE,IAAU;QACjD,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,4CAA4C;IAClC,eAAe,CAAC,IAAS,EAAE,MAAc,EAAE,YAAkB;QACrE,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAA,sCAAiB,EAAC,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC;IAC5E,CAAC;IAES,OAAO,CAAC,IAAS,EAAE,IAAY,EAAE,YAAkB;QAC3D,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,YAAY,EAAE,EAAE,CAAC;QAC/B,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,OAAO,IAAA,wCAAmB,EAAC,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;IACnD,CAAC;CACF;AAnED,wCAmEC"}
1
+ {"version":3,"file":"resource-policy.js","sourceRoot":"","sources":["../../src/policies/resource-policy.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,12 @@ export declare class RhinoConfigService {
74
74
  orgPathFor(slug: string): string[] | null;
75
75
  /** Global default route key (root `routeKey`), `'id'` when unset. */
76
76
  globalRouteKey(): string;
77
+ /**
78
+ * How many named scopes one request may combine (root `maxScopesPerRequest`),
79
+ * 3 when unset. A non-positive or non-numeric value falls back to the default
80
+ * rather than locking every scope out of every request.
81
+ */
82
+ maxScopesPerRequest(): number;
77
83
  /**
78
84
  * Column matched against the `:id` URL segment for a model's member
79
85
  * endpoints. Resolution: `models[slug].routeKey ?? config.routeKey ?? 'id'`.
@@ -18,6 +18,7 @@ exports.normalizeConfig = normalizeConfig;
18
18
  const common_1 = require("@nestjs/common");
19
19
  const tokens_1 = require("./constants/tokens");
20
20
  const route_group_validator_1 = require("./utils/route-group-validator");
21
+ const defaults_1 = require("./constants/defaults");
21
22
  /**
22
23
  * Injectable accessor for the consuming app's Rhino configuration.
23
24
  * Wraps the raw config object with convenience lookup methods.
@@ -159,6 +160,17 @@ let RhinoConfigService = class RhinoConfigService {
159
160
  globalRouteKey() {
160
161
  return this.config.routeKey ?? 'id';
161
162
  }
163
+ /**
164
+ * How many named scopes one request may combine (root `maxScopesPerRequest`),
165
+ * 3 when unset. A non-positive or non-numeric value falls back to the default
166
+ * rather than locking every scope out of every request.
167
+ */
168
+ maxScopesPerRequest() {
169
+ const configured = this.config.maxScopesPerRequest;
170
+ return typeof configured === 'number' && Number.isFinite(configured) && configured >= 1
171
+ ? Math.floor(configured)
172
+ : defaults_1.DEFAULT_MAX_SCOPES_PER_REQUEST;
173
+ }
162
174
  /**
163
175
  * Column matched against the `:id` URL segment for a model's member
164
176
  * endpoints. Resolution: `models[slug].routeKey ?? config.routeKey ?? 'id'`.
@@ -1 +1 @@
1
- {"version":3,"file":"rhino.config.js","sourceRoot":"","sources":["../src/rhino.config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rhino.config.js","sourceRoot":"","sources":["../src/rhino.config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA+RA,oDAsDC;AAKD,0CA+DC;AAzZD,2CAAoD;AACpD,+CAAkD;AAQlD,yEAAoE;AACpE,mDAAsE;AAEtE;;;GAGG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAUsB;IATnD;;;;;;OAMG;IACc,QAAQ,CAA+B;IAExD,YAAmD,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;QACpE,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,sBAAsB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC3D,CAAC;IAED,2EAA2E;IAC3E,qBAAqB,CAAC,IAA+B;QACnD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9C,CAAC;IAED,0EAA0E;IAC1E,eAAe,CACb,IAA+B;QAE/B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC;IAED,2EAA2E;IAC3E,iBAAiB;QACf,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC;aAC3D,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;OAUG;IACH,aAAa,CAAC,IAA+B;QAC3C,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,oCAAoC;YACpC,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC,MAAM,CAAC;QACtE,CAAC;QACD,+DAA+D;QAC/D,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,IAA+B;QACpD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;IAChC,CAAC;IAED,kBAAkB;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACvC,OAAO,OAAO,CAAC,EAAE,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;IACzE,CAAC;IAED,4BAA4B;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,4BAA4B,IAAI,IAAI,CAAC;IACvE,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,qEAAqE;IACrE,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACnD,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC;YACrF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACxB,CAAC,CAAC,yCAA8B,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;IAC7D,CAAC;IAED,YAAY;QACV,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,QAAQ;YAC1C,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE;YACtD,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,IAAI;SACzD,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,CAAC;YACtD,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI;YAC3D,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB;SAClE,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO;YACL,SAAS,EACP,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS;gBAC3B,OAAO,CAAC,GAAG,CAAC,UAAU;gBACtB,yBAAyB;YAC3B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI;YACpD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,IAAI,MAAM;YAChD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,OAAO;YACnD,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,IAAI,UAAU;YAC5D,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI;SAC1E,CAAC;IACJ,CAAC;CACF,CAAA;AArMY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAWE,WAAA,IAAA,eAAM,EAAC,qBAAY,CAAC,CAAA;;GAVtB,kBAAkB,CAqM9B;AAED,uEAAuE;AACvE,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,2EAA2E;AAC3E,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,qBAAqB,CAC5B,OAAe,EACf,MAAyC;IAEzC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAiB,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;QAC7D,CAAC;QACD,MAAM,cAAc,GAAG;YACrB,KAAK;YACL,GAAG,KAAK,GAAG;YACX,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACvD,GAAG,KAAK,IAAI;SACb,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAC;YACpD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAEvD,iEAAiE;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,oBAAoB,CAClC,MAAyC;IAEzC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;IAC5C,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACV,kBAAkB,IAAI,yCAAyC,MAAM,KAAK;QACxE,kFAAkF;QAClF,mGAAmG,CACtG,CAAC;IAEJ,MAAM,OAAO,GAAG,CAAC,IAAY,EAAmB,EAAE;QAChD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,qBAAqB,EAAE,KAAK,EAAE,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CACF,IAAI,EACJ,uBAAuB,WAAW,mEAAmE,CACtG,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,EAAE,UAAU,OAAO,oCAAoC,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,qBAAqB;gBAAE,OAAO,IAAI,CAAC;YAChD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,EAAE,sBAAsB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,sCAAsC,qBAAqB,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAmB;IACjD,MAAM,UAAU,GAAgB;QAC9B,GAAG,MAAM;QACT,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;QACrD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,IAAI;YACnB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SACzB;QACD,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,IAAI;YAClB,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;SAC9B;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,UAAU;YACzB,sBAAsB,EAAE,KAAK;YAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;SACvB;KACF,CAAC;IAEF,wEAAwE;IACxE,2EAA2E;IAC3E,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,EAAE;QACzD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,8DAA8D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAC/F,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IACF,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,mEAAmE;IACnE,4EAA4E;IAC5E,uBAAuB;IACvB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,IAAI,GAAG,CAAC,YAAY,IAAI,IAAI;YAAE,SAAS;QACvC,IACE,CAAC,GAAG,CAAC,WAAW;YAChB,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,EACxE,CAAC;YACD,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,oBAAoB,GAAG,CAAC,YAAY,yCAAyC,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wDAAwD;IACxD,IAAA,2CAAmB,EAAC,UAAU,CAAC,CAAC;IAEhC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { ModelRegistration } from '../interfaces/rhino-config.interface';
2
2
  import { RhinoConfigService } from '../rhino.config';
3
+ import { DEFAULT_MAX_SCOPES_PER_REQUEST } from '../constants/defaults';
3
4
  export interface ParsedQuery {
4
5
  where: Record<string, any>;
5
6
  orderBy: any;
@@ -9,7 +10,26 @@ export interface ParsedQuery {
9
10
  perPage?: number;
10
11
  /** Validated named-scope key to apply (index/trashed only). */
11
12
  scopeName?: string;
13
+ /**
14
+ * Validated named scopes to apply, in the order the URL listed them, each
15
+ * with its bound arguments (index/trashed only).
16
+ */
17
+ scopes?: Array<{
18
+ name: string;
19
+ args: Record<string, any>;
20
+ }>;
12
21
  }
22
+ /** Who is asking, so the policy can gate scopes and attributes. */
23
+ export interface QueryContext {
24
+ user?: any;
25
+ organization?: any;
26
+ }
27
+ /**
28
+ * Fallback for how many named scopes one request may combine, used when no
29
+ * config is injected. Apps set the root `maxScopesPerRequest` key. Defined in
30
+ * constants/defaults so this module and `rhino.config` do not import each other.
31
+ */
32
+ export { DEFAULT_MAX_SCOPES_PER_REQUEST };
13
33
  /**
14
34
  * Parses query string parameters into Prisma-compatible `findMany` args.
15
35
  *
@@ -31,11 +51,58 @@ export declare class QueryBuilderService {
31
51
  constructor(config?: RhinoConfigService);
32
52
  build(query: Record<string, any>, reg: ModelRegistration, opts?: {
33
53
  namedScopes?: boolean;
54
+ ctx?: QueryContext;
34
55
  }): ParsedQuery;
35
- buildWhere(query: Record<string, any>, reg: ModelRegistration): Record<string, any>;
56
+ /**
57
+ * Parse, authorize and bind `?scope=` / `?scope[name][param]=value`.
58
+ *
59
+ * Two wire forms, which cannot be mixed in one request because they share the
60
+ * same query key:
61
+ *
62
+ * ?scope=archived legacy, one scope, no arguments
63
+ * ?scope[archived]= same thing in the bracket form
64
+ * ?scope[since]=2026-01-01 one argument, bound to the single
65
+ * declared parameter
66
+ * ?scope[window][from]=a&scope[window][to]=b named arguments
67
+ *
68
+ * A scope declares its parameters as `static params` (and `static
69
+ * optionalParams`) on the scope class; the bound arguments reach `apply()` as
70
+ * `context.args`. A scope that declares none never receives any.
71
+ */
72
+ buildNamedScopes(query: Record<string, any>, reg: ModelRegistration, ctx?: QueryContext): Array<{
73
+ name: string;
74
+ args: Record<string, any>;
75
+ }>;
76
+ /** How many named scopes this app allows in one request. */
77
+ private maxScopesPerRequest;
78
+ /** Own-key check: a prototype key such as `constructor` is never a scope. */
79
+ private assertScopeDeclared;
80
+ /**
81
+ * Bind the raw value sent for one scope to the parameters its class declares.
82
+ * Every argument is named: a positional list is not accepted.
83
+ */
84
+ private bindScopeArguments;
85
+ /**
86
+ * Query-string values always arrive as strings; hand scope bodies real
87
+ * booleans so a check cannot be fooled by the string "false".
88
+ */
89
+ private coerceScopeArgument;
90
+ /**
91
+ * Scope names this user may select, or `['*']` when the policy does not
92
+ * restrict them (the default, and the behavior of every policy written before
93
+ * `permittedScopes()` existed).
94
+ */
95
+ private permittedScopeNames;
96
+ /**
97
+ * Whether this user may use an attribute as a query predicate: the same gate
98
+ * the serializer applies to the response body. A dotted relation field is
99
+ * left alone — the related model's own policy is not reachable from here.
100
+ */
101
+ private attributeQueryable;
102
+ buildWhere(query: Record<string, any>, reg: ModelRegistration, ctx?: QueryContext): Record<string, any>;
36
103
  private parseFilterValue;
37
104
  private buildRelationContains;
38
- buildOrderBy(query: Record<string, any>, reg: ModelRegistration): any;
105
+ buildOrderBy(query: Record<string, any>, reg: ModelRegistration, ctx?: QueryContext): any;
39
106
  buildInclude(query: Record<string, any>, reg: ModelRegistration): Record<string, any> | undefined;
40
107
  private assignInclude;
41
108
  buildSelect(query: Record<string, any>, reg: ModelRegistration): Record<string, any> | undefined;
@@ -12,10 +12,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.QueryBuilderService = void 0;
15
+ exports.QueryBuilderService = exports.DEFAULT_MAX_SCOPES_PER_REQUEST = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const rhino_config_1 = require("../rhino.config");
18
18
  const rhino_exception_1 = require("../errors/rhino-exception");
19
+ const defaults_1 = require("../constants/defaults");
20
+ Object.defineProperty(exports, "DEFAULT_MAX_SCOPES_PER_REQUEST", { enumerable: true, get: function () { return defaults_1.DEFAULT_MAX_SCOPES_PER_REQUEST; } });
19
21
  /**
20
22
  * Parses query string parameters into Prisma-compatible `findMany` args.
21
23
  *
@@ -38,34 +40,190 @@ let QueryBuilderService = class QueryBuilderService {
38
40
  this.config = config;
39
41
  }
40
42
  build(query, reg, opts = {}) {
43
+ const ctx = opts.ctx ?? {};
41
44
  const parsed = {
42
- where: this.buildWhere(query, reg),
43
- orderBy: this.buildOrderBy(query, reg),
45
+ where: this.buildWhere(query, reg, ctx),
46
+ orderBy: this.buildOrderBy(query, reg, ctx),
44
47
  include: this.buildInclude(query, reg),
45
48
  select: this.buildSelect(query, reg),
46
49
  page: this.parseInt(query.page),
47
50
  perPage: this.parseInt(query.per_page ?? query.perPage),
48
51
  };
49
52
  if (opts.namedScopes) {
50
- // A non-string (e.g. repeated/array ?scope=a&scope=b) is never a valid
51
- // scope name reject it before any prototype-key lookups.
52
- if (query.scope != null && typeof query.scope !== 'string') {
53
+ parsed.scopes = this.buildNamedScopes(query, reg, ctx);
54
+ // Kept for consumers that read a single scope name.
55
+ parsed.scopeName = parsed.scopes[0]?.name;
56
+ }
57
+ return parsed;
58
+ }
59
+ /**
60
+ * Parse, authorize and bind `?scope=` / `?scope[name][param]=value`.
61
+ *
62
+ * Two wire forms, which cannot be mixed in one request because they share the
63
+ * same query key:
64
+ *
65
+ * ?scope=archived legacy, one scope, no arguments
66
+ * ?scope[archived]= same thing in the bracket form
67
+ * ?scope[since]=2026-01-01 one argument, bound to the single
68
+ * declared parameter
69
+ * ?scope[window][from]=a&scope[window][to]=b named arguments
70
+ *
71
+ * A scope declares its parameters as `static params` (and `static
72
+ * optionalParams`) on the scope class; the bound arguments reach `apply()` as
73
+ * `context.args`. A scope that declares none never receives any.
74
+ */
75
+ buildNamedScopes(query, reg, ctx = {}) {
76
+ const raw = query.scope;
77
+ // Nothing requested: the model's default scope, which takes no arguments.
78
+ if (raw == null || raw === '' || (typeof raw === 'object' && Object.keys(raw).length === 0)) {
79
+ if (reg.defaultScope === undefined)
80
+ return [];
81
+ this.assertScopeDeclared(reg.defaultScope, reg);
82
+ return [{ name: reg.defaultScope, args: {} }];
83
+ }
84
+ let requested;
85
+ if (typeof raw === 'string') {
86
+ // Legacy form — one scope, no arguments.
87
+ requested = [[raw, '']];
88
+ }
89
+ else if (Array.isArray(raw) || typeof raw !== 'object') {
90
+ // A repeated ?scope=a&scope=b or ?scope[]=a names nothing.
91
+ throw rhino_exception_1.RhinoException.forbidden(`Scope is not allowed`);
92
+ }
93
+ else {
94
+ requested = Object.entries(raw);
95
+ }
96
+ if (requested.length > this.maxScopesPerRequest()) {
97
+ throw rhino_exception_1.RhinoException.forbidden('Too many scopes requested');
98
+ }
99
+ const permitted = this.permittedScopeNames(reg, ctx);
100
+ return requested.map(([name, rawArgs]) => {
101
+ if (typeof name !== 'string' || name === '') {
53
102
  throw rhino_exception_1.RhinoException.forbidden(`Scope is not allowed`);
54
103
  }
55
- const requested = typeof query.scope === 'string' && query.scope !== '' ? query.scope : undefined;
56
- const scopeName = requested ?? reg.defaultScope;
57
- if (scopeName !== undefined) {
58
- if (!reg.namedScopes ||
59
- !Object.prototype.hasOwnProperty.call(reg.namedScopes, scopeName) ||
60
- typeof reg.namedScopes[scopeName] !== 'function') {
61
- throw rhino_exception_1.RhinoException.forbidden(`Scope '${scopeName}' is not allowed`);
62
- }
63
- parsed.scopeName = scopeName;
104
+ this.assertScopeDeclared(name, reg);
105
+ if (!(permitted.length === 1 && permitted[0] === '*') && !permitted.includes(name)) {
106
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' is not allowed`);
64
107
  }
108
+ return { name, args: this.bindScopeArguments(name, reg, rawArgs) };
109
+ });
110
+ }
111
+ /** How many named scopes this app allows in one request. */
112
+ maxScopesPerRequest() {
113
+ return this.config?.maxScopesPerRequest?.() ?? defaults_1.DEFAULT_MAX_SCOPES_PER_REQUEST;
114
+ }
115
+ /** Own-key check: a prototype key such as `constructor` is never a scope. */
116
+ assertScopeDeclared(name, reg) {
117
+ if (!reg.namedScopes ||
118
+ !Object.prototype.hasOwnProperty.call(reg.namedScopes, name) ||
119
+ typeof reg.namedScopes[name] !== 'function') {
120
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' is not allowed`);
65
121
  }
66
- return parsed;
67
122
  }
68
- buildWhere(query, reg) {
123
+ /**
124
+ * Bind the raw value sent for one scope to the parameters its class declares.
125
+ * Every argument is named: a positional list is not accepted.
126
+ */
127
+ bindScopeArguments(name, reg, raw) {
128
+ const ScopeClass = reg.namedScopes[name];
129
+ const params = Array.isArray(ScopeClass.params) ? ScopeClass.params : [];
130
+ const optional = Array.isArray(ScopeClass.optionalParams)
131
+ ? ScopeClass.optionalParams
132
+ : [];
133
+ let given;
134
+ if (raw == null || raw === '') {
135
+ // ?scope[archived]= — no arguments. A scope with required parameters
136
+ // still fails below, naming them.
137
+ given = {};
138
+ }
139
+ else if (Array.isArray(raw)) {
140
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' requires named parameters`);
141
+ }
142
+ else if (typeof raw !== 'object') {
143
+ if (params.length === 0) {
144
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' does not accept arguments`);
145
+ }
146
+ // A bare value binds to the single declared parameter. Two parameters can
147
+ // never be guessed at from one value.
148
+ if (params.length > 1) {
149
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' requires named parameters`);
150
+ }
151
+ given = { [params[0]]: raw };
152
+ }
153
+ else {
154
+ if (params.length === 0) {
155
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' does not accept arguments`);
156
+ }
157
+ given = { ...raw };
158
+ }
159
+ for (const key of Object.keys(given)) {
160
+ if (!params.includes(key)) {
161
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' does not accept parameter '${key}'`);
162
+ }
163
+ if (given[key] !== null && typeof given[key] === 'object') {
164
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' requires named parameters`);
165
+ }
166
+ }
167
+ const args = {};
168
+ for (const param of params) {
169
+ if (Object.prototype.hasOwnProperty.call(given, param)) {
170
+ args[param] = this.coerceScopeArgument(given[param]);
171
+ continue;
172
+ }
173
+ if (!optional.includes(param)) {
174
+ throw rhino_exception_1.RhinoException.forbidden(`Scope '${name}' requires parameter '${param}'`);
175
+ }
176
+ }
177
+ return args;
178
+ }
179
+ /**
180
+ * Query-string values always arrive as strings; hand scope bodies real
181
+ * booleans so a check cannot be fooled by the string "false".
182
+ */
183
+ coerceScopeArgument(value) {
184
+ if (typeof value !== 'string')
185
+ return value;
186
+ const lowered = value.toLowerCase();
187
+ if (lowered === 'true')
188
+ return true;
189
+ if (lowered === 'false')
190
+ return false;
191
+ return value;
192
+ }
193
+ /**
194
+ * Scope names this user may select, or `['*']` when the policy does not
195
+ * restrict them (the default, and the behavior of every policy written before
196
+ * `permittedScopes()` existed).
197
+ */
198
+ permittedScopeNames(reg, ctx) {
199
+ if (!reg.policy)
200
+ return ['*'];
201
+ const policy = new reg.policy();
202
+ if (typeof policy.permittedScopes !== 'function')
203
+ return ['*'];
204
+ const permitted = policy.permittedScopes(ctx.user, ctx.organization);
205
+ return Array.isArray(permitted) ? permitted.map((name) => String(name)) : ['*'];
206
+ }
207
+ /**
208
+ * Whether this user may use an attribute as a query predicate: the same gate
209
+ * the serializer applies to the response body. A dotted relation field is
210
+ * left alone — the related model's own policy is not reachable from here.
211
+ */
212
+ attributeQueryable(name, reg, ctx) {
213
+ if (!reg.policy || name.includes('.'))
214
+ return true;
215
+ const policy = new reg.policy();
216
+ const hidden = policy.hiddenAttributesForShow?.(ctx.user, ctx.organization) ?? [];
217
+ if (hidden.includes(name))
218
+ return false;
219
+ const permitted = policy.permittedAttributesForShow?.(ctx.user, ctx.organization) ?? [
220
+ '*',
221
+ ];
222
+ if (permitted.length === 1 && permitted[0] === '*')
223
+ return true;
224
+ return permitted.includes(name);
225
+ }
226
+ buildWhere(query, reg, ctx = {}) {
69
227
  const where = {};
70
228
  const filter = query.filter ?? {};
71
229
  const allowed = new Set(reg.allowedFilters ?? []);
@@ -73,12 +231,26 @@ let QueryBuilderService = class QueryBuilderService {
73
231
  for (const [key, rawVal] of Object.entries(filter)) {
74
232
  if (!allowed.has(key))
75
233
  continue;
234
+ // Attribute permissions used to apply only when serializing, so a
235
+ // hidden column stayed usable as a predicate: ?filter[salary]=300000
236
+ // never printed a salary but told the caller whose salary it was.
237
+ if (!this.attributeQueryable(key, reg, ctx)) {
238
+ throw rhino_exception_1.RhinoException.forbidden(`Filter '${key}' is not allowed`);
239
+ }
76
240
  where[key] = this.parseFilterValue(rawVal);
77
241
  }
78
242
  }
79
243
  const search = query.search;
80
244
  if (search && reg.allowedSearch && reg.allowedSearch.length > 0) {
81
- const fragments = reg.allowedSearch.map((field) => {
245
+ const searchable = reg.allowedSearch.filter((field) => this.attributeQueryable(field, reg, ctx));
246
+ if (searchable.length === 0) {
247
+ // Every searchable column is hidden from this user. Searching a hidden
248
+ // column tells the caller what is in it, so match nothing rather than
249
+ // silently returning the whole list the client asked to narrow.
250
+ where.OR = [];
251
+ return where;
252
+ }
253
+ const fragments = searchable.map((field) => {
82
254
  if (field.includes('.')) {
83
255
  return this.buildRelationContains(field, String(search));
84
256
  }
@@ -106,7 +278,8 @@ let QueryBuilderService = class QueryBuilderService {
106
278
  }
107
279
  return inner;
108
280
  }
109
- buildOrderBy(query, reg) {
281
+ buildOrderBy(query, reg, ctx = {}) {
282
+ const clientSupplied = query.sort != null && query.sort !== '';
110
283
  const raw = query.sort ?? reg.defaultSort;
111
284
  if (!raw)
112
285
  return undefined;
@@ -119,6 +292,10 @@ let QueryBuilderService = class QueryBuilderService {
119
292
  if (allowed.size > 0 && !allowed.has(field)) {
120
293
  throw new common_1.BadRequestException(`Sort not allowed: ${field}`);
121
294
  }
295
+ // The model's own defaultSort is the server's choice, not the client's.
296
+ if (clientSupplied && !this.attributeQueryable(field, reg, ctx)) {
297
+ throw rhino_exception_1.RhinoException.forbidden(`Sort '${field}' is not allowed`);
298
+ }
122
299
  orderings.push({ [field]: desc ? 'desc' : 'asc' });
123
300
  }
124
301
  return orderings;
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.service.js","sourceRoot":"","sources":["../../src/services/query-builder.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.service.js","sourceRoot":"","sources":["../../src/services/query-builder.service.ts"],"names":[],"mappings":"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"}