@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 +2 -2
- package/dist/constants/defaults.d.ts +12 -0
- package/dist/constants/defaults.js +16 -0
- package/dist/constants/defaults.js.map +1 -0
- package/dist/interfaces/rhino-config.interface.d.ts +26 -0
- package/dist/policies/resource-policy.d.ts +9 -0
- package/dist/policies/resource-policy.js +12 -0
- package/dist/policies/resource-policy.js.map +1 -1
- package/dist/rhino.config.d.ts +6 -0
- package/dist/rhino.config.js +12 -0
- package/dist/rhino.config.js.map +1 -1
- package/dist/services/query-builder.service.d.ts +69 -2
- package/dist/services/query-builder.service.js +196 -19
- package/dist/services/query-builder.service.js.map +1 -1
- package/dist/services/resource.service.js +19 -10
- package/dist/services/resource.service.js.map +1 -1
- package/dist/services/scope.service.d.ts +19 -1
- package/dist/services/scope.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/stubs/skills/rhino-policy.md +3 -1
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;
|
|
1
|
+
{"version":3,"file":"resource-policy.js","sourceRoot":"","sources":["../../src/policies/resource-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/rhino.config.d.ts
CHANGED
|
@@ -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'`.
|
package/dist/rhino.config.js
CHANGED
|
@@ -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'`.
|
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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"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
51
|
-
//
|
|
52
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
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
|
|
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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"}
|