@dudousxd/nestjs-authz 0.5.0 → 0.6.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/CHANGELOG.md +64 -0
- package/dist/can-endpoint.controller.d.ts +16 -0
- package/dist/can-endpoint.controller.d.ts.map +1 -1
- package/dist/can-endpoint.controller.js +54 -0
- package/dist/can-endpoint.controller.js.map +1 -1
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/gate.d.ts +114 -2
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +338 -36
- package/dist/gate.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/permission-cache.d.ts +33 -0
- package/dist/permission-cache.d.ts.map +1 -0
- package/dist/permission-cache.js +48 -0
- package/dist/permission-cache.js.map +1 -0
- package/dist/permission-matcher.d.ts +22 -0
- package/dist/permission-matcher.d.ts.map +1 -0
- package/dist/permission-matcher.js +55 -0
- package/dist/permission-matcher.js.map +1 -0
- package/dist/permission-provider.d.ts +18 -0
- package/dist/permission-provider.d.ts.map +1 -1
- package/dist/policy-registry.d.ts +2 -0
- package/dist/policy-registry.d.ts.map +1 -1
- package/dist/policy-registry.js +10 -0
- package/dist/policy-registry.js.map +1 -1
- package/dist/scope.d.ts +84 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +41 -0
- package/dist/scope.js.map +1 -0
- package/dist/types.d.ts +53 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/gate.js
CHANGED
|
@@ -14,12 +14,56 @@ import { ForbiddenException, Inject, Injectable, Optional } from '@nestjs/common
|
|
|
14
14
|
import { ModuleRef } from '@nestjs/core';
|
|
15
15
|
import { publishAuthzDecision } from './diagnostics.js';
|
|
16
16
|
import { AbilityNotResolvedException, AmbiguousAbilityException } from './errors/exceptions.js';
|
|
17
|
+
import { PermissionCache } from './permission-cache.js';
|
|
18
|
+
import { permissionSatisfied } from './permission-matcher.js';
|
|
17
19
|
import { PolicyRegistry } from './policy-registry.js';
|
|
18
20
|
import { defaultRoleResolver } from './role-provider.js';
|
|
21
|
+
import { normalizeScope, scopeAll, scopeNone, } from './scope.js';
|
|
19
22
|
import { AUTHZ_MODULE_OPTIONS, CONTEXT_ACCESSOR, PERMISSION_PROVIDER, ROLE_PROVIDER, } from './tokens.js';
|
|
23
|
+
/** Normalize a `boolean | PolicyResponse | null | undefined` into a {@link NormalizedResult}. */
|
|
24
|
+
function normalizeResult(value) {
|
|
25
|
+
if (value == null)
|
|
26
|
+
return { allowed: undefined };
|
|
27
|
+
if (typeof value === 'boolean')
|
|
28
|
+
return { allowed: value };
|
|
29
|
+
// `exactOptionalPropertyTypes`: only attach `message` when actually present.
|
|
30
|
+
return value.message === undefined
|
|
31
|
+
? { allowed: Boolean(value.allowed) }
|
|
32
|
+
: { allowed: Boolean(value.allowed), message: value.message };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Attach `message` to a decision only when defined (honors `exactOptionalPropertyTypes`,
|
|
36
|
+
* which forbids an explicit `message: undefined` on an optional property).
|
|
37
|
+
*/
|
|
38
|
+
function withMessage(decision, message) {
|
|
39
|
+
return message === undefined ? decision : { ...decision, message };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build the `ForbiddenException` for a denied `authorize(...)`, surfacing the
|
|
43
|
+
* decision's `reason` (and the policy/hook `message` when present) instead of
|
|
44
|
+
* discarding it. The message string defaults to the generic `Unauthorized: <ability>`
|
|
45
|
+
* for backward compatibility; the structured body carries `ability` + `reason` so a
|
|
46
|
+
* 403 is debuggable by clients and the diagnostics watcher alike.
|
|
47
|
+
*/
|
|
48
|
+
function forbidden(ability, decision) {
|
|
49
|
+
const message = decision.message ?? `Unauthorized: ${ability}`;
|
|
50
|
+
return new ForbiddenException({
|
|
51
|
+
statusCode: 403,
|
|
52
|
+
error: 'Forbidden',
|
|
53
|
+
message,
|
|
54
|
+
ability,
|
|
55
|
+
reason: decision.reason,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
20
58
|
// A sentinel marking "no user resolved" distinct from a legitimately-`undefined`
|
|
21
59
|
// user. `forUser(undefined)` explicitly authorizes an anonymous user.
|
|
22
60
|
const NO_USER = Symbol('authz:no-user');
|
|
61
|
+
/**
|
|
62
|
+
* Key under which the per-request {@link PermissionCache} is stashed on the
|
|
63
|
+
* nestjs-context store. `Symbol.for` so the same key resolves across copies of
|
|
64
|
+
* this module (e.g. multiple installs in a monorepo) sharing one store.
|
|
65
|
+
*/
|
|
66
|
+
const REQUEST_PERMISSION_CACHE = Symbol.for('@dudousxd/nestjs-authz:request-permission-cache');
|
|
23
67
|
/**
|
|
24
68
|
* Laravel-style authorization Gate.
|
|
25
69
|
*
|
|
@@ -39,8 +83,18 @@ let Gate = class Gate {
|
|
|
39
83
|
roleProvider;
|
|
40
84
|
gates = new Map();
|
|
41
85
|
superAdmin;
|
|
86
|
+
after;
|
|
42
87
|
resolveUser;
|
|
43
88
|
roleResolver;
|
|
89
|
+
// Memoized ModuleRef seam lookups. These tokens are singletons bound once at
|
|
90
|
+
// module init, so the (potentially throwing) non-strict container scan only
|
|
91
|
+
// needs to run once per seam — never on every authorization check.
|
|
92
|
+
contextResolved = false;
|
|
93
|
+
contextCached;
|
|
94
|
+
permissionProviderResolved = false;
|
|
95
|
+
permissionProviderCached;
|
|
96
|
+
roleProviderResolved = false;
|
|
97
|
+
roleProviderCached;
|
|
44
98
|
constructor(policies, options, context, moduleRef, permissionProvider, roleProvider) {
|
|
45
99
|
this.policies = policies;
|
|
46
100
|
this.context = context;
|
|
@@ -48,6 +102,7 @@ let Gate = class Gate {
|
|
|
48
102
|
this.permissionProvider = permissionProvider;
|
|
49
103
|
this.roleProvider = roleProvider;
|
|
50
104
|
this.superAdmin = options?.superAdmin;
|
|
105
|
+
this.after = options?.after;
|
|
51
106
|
this.resolveUser = options?.resolveUser;
|
|
52
107
|
this.roleResolver = options?.resolveRoles ?? defaultRoleResolver;
|
|
53
108
|
}
|
|
@@ -59,14 +114,18 @@ let Gate = class Gate {
|
|
|
59
114
|
resolveContext() {
|
|
60
115
|
if (this.context)
|
|
61
116
|
return this.context;
|
|
117
|
+
if (this.contextResolved)
|
|
118
|
+
return this.contextCached;
|
|
119
|
+
this.contextResolved = true;
|
|
62
120
|
if (!this.moduleRef)
|
|
63
|
-
return
|
|
121
|
+
return this.contextCached;
|
|
64
122
|
try {
|
|
65
|
-
|
|
123
|
+
this.contextCached = this.moduleRef.get(CONTEXT_ACCESSOR, { strict: false });
|
|
66
124
|
}
|
|
67
125
|
catch {
|
|
68
|
-
|
|
126
|
+
this.contextCached = undefined;
|
|
69
127
|
}
|
|
128
|
+
return this.contextCached;
|
|
70
129
|
}
|
|
71
130
|
/**
|
|
72
131
|
* Locate the optional {@link PermissionProvider} (the RBAC seam). Prefers the value
|
|
@@ -76,14 +135,20 @@ let Gate = class Gate {
|
|
|
76
135
|
resolvePermissionProvider() {
|
|
77
136
|
if (this.permissionProvider)
|
|
78
137
|
return this.permissionProvider;
|
|
138
|
+
if (this.permissionProviderResolved)
|
|
139
|
+
return this.permissionProviderCached;
|
|
140
|
+
this.permissionProviderResolved = true;
|
|
79
141
|
if (!this.moduleRef)
|
|
80
|
-
return
|
|
142
|
+
return this.permissionProviderCached;
|
|
81
143
|
try {
|
|
82
|
-
|
|
144
|
+
this.permissionProviderCached = this.moduleRef.get(PERMISSION_PROVIDER, {
|
|
145
|
+
strict: false,
|
|
146
|
+
});
|
|
83
147
|
}
|
|
84
148
|
catch {
|
|
85
|
-
|
|
149
|
+
this.permissionProviderCached = undefined;
|
|
86
150
|
}
|
|
151
|
+
return this.permissionProviderCached;
|
|
87
152
|
}
|
|
88
153
|
/**
|
|
89
154
|
* Locate the optional {@link RoleProvider} (the coarse role seam). Prefers the value
|
|
@@ -93,14 +158,48 @@ let Gate = class Gate {
|
|
|
93
158
|
resolveRoleProvider() {
|
|
94
159
|
if (this.roleProvider)
|
|
95
160
|
return this.roleProvider;
|
|
161
|
+
if (this.roleProviderResolved)
|
|
162
|
+
return this.roleProviderCached;
|
|
163
|
+
this.roleProviderResolved = true;
|
|
96
164
|
if (!this.moduleRef)
|
|
97
|
-
return
|
|
165
|
+
return this.roleProviderCached;
|
|
98
166
|
try {
|
|
99
|
-
|
|
167
|
+
this.roleProviderCached = this.moduleRef.get(ROLE_PROVIDER, { strict: false });
|
|
100
168
|
}
|
|
101
169
|
catch {
|
|
170
|
+
this.roleProviderCached = undefined;
|
|
171
|
+
}
|
|
172
|
+
return this.roleProviderCached;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* The per-request {@link PermissionCache}, stashed on the nestjs-context store so
|
|
176
|
+
* every check within one HTTP request shares a single `getPermissions` fetch
|
|
177
|
+
* (kills the N+1 a list page would otherwise cause). Returns `undefined` when no
|
|
178
|
+
* context store is available (standalone use), in which case callers fall back to
|
|
179
|
+
* a transient cache (e.g. one per `allowsMany` batch) or no memoization.
|
|
180
|
+
*/
|
|
181
|
+
resolveRequestCache() {
|
|
182
|
+
const context = this.resolveContext();
|
|
183
|
+
// `get()` is part of the ContextAccessor contract but a stub/partial accessor
|
|
184
|
+
// may omit it (or it may throw outside a request scope) — degrade to "no
|
|
185
|
+
// request cache" rather than failing the check.
|
|
186
|
+
if (!context || typeof context.get !== 'function')
|
|
102
187
|
return undefined;
|
|
188
|
+
let store;
|
|
189
|
+
try {
|
|
190
|
+
store = context.get();
|
|
103
191
|
}
|
|
192
|
+
catch {
|
|
193
|
+
store = undefined;
|
|
194
|
+
}
|
|
195
|
+
if (!store)
|
|
196
|
+
return undefined;
|
|
197
|
+
const existing = store[REQUEST_PERMISSION_CACHE];
|
|
198
|
+
if (existing instanceof PermissionCache)
|
|
199
|
+
return existing;
|
|
200
|
+
const cache = new PermissionCache();
|
|
201
|
+
store[REQUEST_PERMISSION_CACHE] = cache;
|
|
202
|
+
return cache;
|
|
104
203
|
}
|
|
105
204
|
/** Register an ad-hoc, model-less gate resolved by `ability` name. */
|
|
106
205
|
define(ability, fn) {
|
|
@@ -152,15 +251,46 @@ let Gate = class Gate {
|
|
|
152
251
|
}
|
|
153
252
|
// --- public API (operates on the current/context user) ---
|
|
154
253
|
async allows(ability, resource) {
|
|
155
|
-
return this.check(await this.currentUser(), ability, resource);
|
|
254
|
+
return this.check(await this.currentUser(), ability, resource, this.resolveRequestCache());
|
|
156
255
|
}
|
|
157
256
|
async denies(ability, resource) {
|
|
158
257
|
return !(await this.allows(ability, resource));
|
|
159
258
|
}
|
|
160
259
|
async authorize(ability, resource) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
260
|
+
const decision = await this.decide(await this.currentUser(), ability, resource, this.resolveRequestCache());
|
|
261
|
+
if (!decision.allowed)
|
|
262
|
+
throw forbidden(ability, decision);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Authorize MANY abilities for the current (context) user in a single pass. The
|
|
266
|
+
* user is resolved ONCE and a single {@link PermissionCache} is shared across all
|
|
267
|
+
* items, so a list page (N cards) costs one user resolution + at most one
|
|
268
|
+
* permission fetch instead of N of each. Order is preserved; each result echoes
|
|
269
|
+
* its input `ability`/`resource` plus the `allowed` verdict.
|
|
270
|
+
*
|
|
271
|
+
* Fault-isolating: an item whose ability is unresolved/ambiguous denies just
|
|
272
|
+
* THAT item (it does not throw and abort the batch) — a batch is a best-effort
|
|
273
|
+
* verdict list, not an enforcement gate.
|
|
274
|
+
*/
|
|
275
|
+
async allowsMany(items) {
|
|
276
|
+
return this.checkMany(await this.currentUser(), items);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Resolve the QUERY SCOPE constraint for the current (context) user against
|
|
280
|
+
* `entity` — the `accessibleBy` / Pundit `policy_scope` concept. Returns an
|
|
281
|
+
* ORM-neutral {@link ScopeConstraint} an adapter (e.g. the TypeORM `applyScope`
|
|
282
|
+
* helper) turns into a parameterized `WHERE`.
|
|
283
|
+
*
|
|
284
|
+
* Consistent with the Gate's single-resource semantics:
|
|
285
|
+
* - super-admin / before-grant / permission-provider grant → `allow-all`,
|
|
286
|
+
* - anonymous, or no policy/scope → `deny-all` (default-deny),
|
|
287
|
+
* - otherwise the policy's `scope` (or `viewAny`-style) constraint.
|
|
288
|
+
*
|
|
289
|
+
* `ability` (default `'viewAny'`) names the permission-provider check used for
|
|
290
|
+
* the allow-all grant and the policy fallback method.
|
|
291
|
+
*/
|
|
292
|
+
async scope(entity, ability = 'viewAny') {
|
|
293
|
+
return this.resolveScope(await this.currentUser(), entity, ability);
|
|
164
294
|
}
|
|
165
295
|
// --- coarse role checks (operate on the current/context user) ---
|
|
166
296
|
/** True when the current user holds `role`. */
|
|
@@ -174,12 +304,123 @@ let Gate = class Gate {
|
|
|
174
304
|
// --- internal: used by BoundGate too ---
|
|
175
305
|
/** @internal */
|
|
176
306
|
allowsForUser(user, ability, resource) {
|
|
177
|
-
return this.check(user, ability, resource);
|
|
307
|
+
return this.check(user, ability, resource, this.resolveRequestCache());
|
|
308
|
+
}
|
|
309
|
+
/** @internal — batch check for an explicit/bound user (see {@link allowsMany}). */
|
|
310
|
+
allowsManyForUser(user, items) {
|
|
311
|
+
return this.checkMany(user, items);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Run a batch of checks against one already-resolved user, sharing a single
|
|
315
|
+
* {@link PermissionCache} so the provider's `getPermissions` runs at most once.
|
|
316
|
+
* Prefers the per-request cache (so the batch also coalesces with other checks in
|
|
317
|
+
* the same request); falls back to a transient per-batch cache when standalone.
|
|
318
|
+
*/
|
|
319
|
+
async checkMany(user, items) {
|
|
320
|
+
const cache = this.resolveRequestCache() ?? new PermissionCache();
|
|
321
|
+
const out = [];
|
|
322
|
+
for (const item of items) {
|
|
323
|
+
let allowed;
|
|
324
|
+
try {
|
|
325
|
+
allowed = await this.check(user, item.ability, item.resource, cache);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// Unresolved/ambiguous ability → deny just this item (don't abort the batch).
|
|
329
|
+
allowed = false;
|
|
330
|
+
}
|
|
331
|
+
out.push(item.resource === undefined
|
|
332
|
+
? { ability: item.ability, allowed }
|
|
333
|
+
: { ability: item.ability, resource: item.resource, allowed });
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
337
|
+
/** @internal — used by {@link BoundGate.authorize} to surface the deny reason/message. */
|
|
338
|
+
decideForUser(user, ability, resource) {
|
|
339
|
+
return this.decide(user, ability, resource, this.resolveRequestCache());
|
|
178
340
|
}
|
|
179
341
|
/** @internal */
|
|
180
342
|
hasAnyRoleForUser(user, roles) {
|
|
181
343
|
return this.checkRoles(user, roles);
|
|
182
344
|
}
|
|
345
|
+
/** @internal — used by {@link BoundGate.scope}. */
|
|
346
|
+
scopeForUser(user, entity, ability = 'viewAny') {
|
|
347
|
+
return this.resolveScope(user, entity, ability);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Resolve a query-scope constraint for `entity`, mirroring {@link resolveBase}'s
|
|
351
|
+
* grant order so scoping stays consistent with single-resource decisions:
|
|
352
|
+
*
|
|
353
|
+
* 1. super-admin hook grants → `allow-all`;
|
|
354
|
+
* 2. (authenticated) permission-provider grant for `ability` → `allow-all`;
|
|
355
|
+
* 3. the policy's `scope` (or `viewAny`-style) method → its constraint;
|
|
356
|
+
* 4. otherwise (anonymous, no policy, no scope method) → `deny-all`.
|
|
357
|
+
*
|
|
358
|
+
* The policy `before` hook is also honored as an allow/deny grant before the
|
|
359
|
+
* scope method runs, so a policy that broadly allows/denies in `before` scopes
|
|
360
|
+
* the same way it decides.
|
|
361
|
+
*/
|
|
362
|
+
async resolveScope(maybeUser, entity, ability) {
|
|
363
|
+
const user = maybeUser === NO_USER ? undefined : maybeUser;
|
|
364
|
+
// 1. Global super-admin hook → allow-all (a `false` does not deny here, it
|
|
365
|
+
// just falls through, mirroring resolveBase's grant-or-fall-through).
|
|
366
|
+
const sa = normalizeResult(await this.superAdmin?.(user, ability));
|
|
367
|
+
if (sa.allowed === true)
|
|
368
|
+
return scopeAll;
|
|
369
|
+
// 2. Permission-provider grant for the scope ability → allow-all.
|
|
370
|
+
if (maybeUser !== NO_USER) {
|
|
371
|
+
const provider = this.resolvePermissionProvider();
|
|
372
|
+
if (provider) {
|
|
373
|
+
if (typeof provider.getPermissions === 'function') {
|
|
374
|
+
const cache = this.resolveRequestCache();
|
|
375
|
+
const satisfied = cache
|
|
376
|
+
? await cache.satisfies(provider, user, ability)
|
|
377
|
+
: await (async () => {
|
|
378
|
+
const granted = await provider.getPermissions?.(user);
|
|
379
|
+
return granted == null ? undefined : permissionSatisfied(granted, ability);
|
|
380
|
+
})();
|
|
381
|
+
if (satisfied === true)
|
|
382
|
+
return scopeAll;
|
|
383
|
+
}
|
|
384
|
+
if ((await provider.hasPermission(user, ability)) === true)
|
|
385
|
+
return scopeAll;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// 3. Policy scope (or viewAny-style fallback) method.
|
|
389
|
+
const policy = this.policies.forResource(entity);
|
|
390
|
+
if (policy) {
|
|
391
|
+
const scopeMethod = this.resolveScopeMethod(policy, ability);
|
|
392
|
+
if (scopeMethod) {
|
|
393
|
+
const before = policy.before;
|
|
394
|
+
if (typeof before === 'function') {
|
|
395
|
+
const result = normalizeResult(await before.call(policy, user, ability));
|
|
396
|
+
if (result.allowed === true)
|
|
397
|
+
return scopeAll;
|
|
398
|
+
if (result.allowed === false)
|
|
399
|
+
return scopeNone;
|
|
400
|
+
}
|
|
401
|
+
// Anonymous users see no rows (default-deny, like the single-resource path).
|
|
402
|
+
if (maybeUser === NO_USER)
|
|
403
|
+
return scopeNone;
|
|
404
|
+
return normalizeScope(await scopeMethod.call(policy, user, entity));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// 4. No way to scope → deny-all.
|
|
408
|
+
return scopeNone;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Pick the policy's scope method: the conventional `scope`, else the `ability`
|
|
412
|
+
* method (e.g. `viewAny`) when it is scope-shaped. Returns `undefined` when the
|
|
413
|
+
* policy declares neither.
|
|
414
|
+
*/
|
|
415
|
+
resolveScopeMethod(policy, ability) {
|
|
416
|
+
const scope = policy.scope;
|
|
417
|
+
if (typeof scope === 'function')
|
|
418
|
+
return scope;
|
|
419
|
+
const fallback = policy[ability];
|
|
420
|
+
if (typeof fallback === 'function')
|
|
421
|
+
return fallback;
|
|
422
|
+
return undefined;
|
|
423
|
+
}
|
|
183
424
|
/**
|
|
184
425
|
* Resolve the user's effective roles and test membership against `roles`. Returns
|
|
185
426
|
* `false` for an anonymous (NO_USER) caller and whenever no source yields a role
|
|
@@ -215,28 +456,60 @@ let Gate = class Gate {
|
|
|
215
456
|
}
|
|
216
457
|
return out;
|
|
217
458
|
}
|
|
218
|
-
async check(maybeUser, ability, resource) {
|
|
219
|
-
|
|
459
|
+
async check(maybeUser, ability, resource, cache) {
|
|
460
|
+
return (await this.decide(maybeUser, ability, resource, cache)).allowed;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Resolve a decision AND publish it for observers. Returns the full decision
|
|
464
|
+
* (verdict + reason + optional deny message) so {@link authorize} can surface the
|
|
465
|
+
* `reason`/`message` on the thrown `ForbiddenException`. {@link check} discards
|
|
466
|
+
* everything but the verdict.
|
|
467
|
+
*/
|
|
468
|
+
async decide(maybeUser, ability, resource, cache) {
|
|
469
|
+
const decision = await this.resolve(maybeUser, ability, resource, cache);
|
|
220
470
|
// Emit the decision for observers (e.g. the generic @dudousxd/nestjs-diagnostics-telescope watcher).
|
|
221
471
|
// Loosely coupled via a diagnostics channel — zero-overhead when no subscriber,
|
|
222
472
|
// and a publish failure can never affect the verdict. Only reached decisions are
|
|
223
473
|
// emitted; an unresolved/ambiguous ability throws above and is intentionally silent.
|
|
224
|
-
publishAuthzDecision(ability, allowed, reason, maybeUser === NO_USER ? undefined : maybeUser, resource);
|
|
225
|
-
return
|
|
474
|
+
publishAuthzDecision(ability, decision.allowed, decision.reason, maybeUser === NO_USER ? undefined : maybeUser, resource);
|
|
475
|
+
return decision;
|
|
226
476
|
}
|
|
227
477
|
/**
|
|
228
|
-
* Resolve an ability to a verdict
|
|
478
|
+
* Resolve an ability to a final verdict, the path that decided it, and an optional
|
|
479
|
+
* deny message. Runs the global `after` hook over the base decision (see
|
|
480
|
+
* {@link AfterHook} for override semantics). Throws
|
|
229
481
|
* {@link AbilityNotResolvedException}/{@link AmbiguousAbilityException} when no
|
|
230
|
-
* decision can be reached (those paths emit no decision).
|
|
482
|
+
* decision can be reached (those paths emit no decision and skip `after`).
|
|
231
483
|
*/
|
|
232
|
-
async resolve(maybeUser, ability, resource) {
|
|
484
|
+
async resolve(maybeUser, ability, resource, cache) {
|
|
485
|
+
const user = maybeUser === NO_USER ? undefined : maybeUser;
|
|
486
|
+
const base = await this.resolveBase(maybeUser, ability, resource, cache);
|
|
487
|
+
// Global `after` hook (Laravel `Gate::after`). It may OVERRIDE only when the
|
|
488
|
+
// base path produced no explicit verdict (`base.allowed === undefined`);
|
|
489
|
+
// otherwise it is observe-only. A nullish/void return never changes anything.
|
|
490
|
+
if (this.after) {
|
|
491
|
+
const observed = base.allowed; // undefined ⇒ policy/gate had no opinion
|
|
492
|
+
const after = normalizeResult(await this.after(user, ability, observed, resource));
|
|
493
|
+
if (observed === undefined && after.allowed !== undefined) {
|
|
494
|
+
return withMessage({ allowed: after.allowed, reason: 'after' }, after.message);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
// Finalize: a base with "no opinion" (undefined) denies by default.
|
|
498
|
+
return withMessage({ allowed: base.allowed === true, reason: base.reason }, base.message);
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* The pre-`after` resolution. `allowed` is `undefined` when the deciding path
|
|
502
|
+
* (policy method / ad-hoc gate) returned a nullish value — "no opinion" — which
|
|
503
|
+
* lets the {@link AfterHook} supply a verdict before the default-deny finalize.
|
|
504
|
+
*/
|
|
505
|
+
async resolveBase(maybeUser, ability, resource, cache) {
|
|
233
506
|
const user = maybeUser === NO_USER ? undefined : maybeUser;
|
|
234
507
|
// Global super-admin hook first.
|
|
235
|
-
const sa = await this.superAdmin?.(user, ability);
|
|
236
|
-
if (sa === true)
|
|
237
|
-
return { allowed: true, reason: 'super-admin' };
|
|
238
|
-
if (sa === false)
|
|
239
|
-
return { allowed: false, reason: 'super-admin' };
|
|
508
|
+
const sa = normalizeResult(await this.superAdmin?.(user, ability));
|
|
509
|
+
if (sa.allowed === true)
|
|
510
|
+
return withMessage({ allowed: true, reason: 'super-admin' }, sa.message);
|
|
511
|
+
if (sa.allowed === false)
|
|
512
|
+
return withMessage({ allowed: false, reason: 'super-admin' }, sa.message);
|
|
240
513
|
// RBAC seam (Laravel/spatie `Gate::before` grant): if a PermissionProvider is
|
|
241
514
|
// registered and the (authenticated) user holds the named permission, grant it.
|
|
242
515
|
// Grant-only — a `false`/`undefined` result falls through to normal resolution,
|
|
@@ -244,6 +517,24 @@ let Gate = class Gate {
|
|
|
244
517
|
if (maybeUser !== NO_USER) {
|
|
245
518
|
const provider = this.resolvePermissionProvider();
|
|
246
519
|
if (provider) {
|
|
520
|
+
// Wildcard/hierarchical grants: when the provider lists the user's granted
|
|
521
|
+
// permissions, apply segment-based wildcard matching in the core so a granted
|
|
522
|
+
// `posts.*` satisfies `posts.update` (and `*` satisfies anything) regardless
|
|
523
|
+
// of adapter. A nullish list defers to the exact-match `hasPermission` path.
|
|
524
|
+
if (typeof provider.getPermissions === 'function') {
|
|
525
|
+
// Route through the (request- or batch-scoped) PermissionCache when one is
|
|
526
|
+
// supplied so the user's granted set is fetched at most once; without a
|
|
527
|
+
// cache, fall back to a direct fetch (behavior unchanged).
|
|
528
|
+
const satisfied = cache
|
|
529
|
+
? await cache.satisfies(provider, user, ability)
|
|
530
|
+
: await (async () => {
|
|
531
|
+
const granted = await provider.getPermissions?.(user);
|
|
532
|
+
return granted == null ? undefined : permissionSatisfied(granted, ability);
|
|
533
|
+
})();
|
|
534
|
+
if (satisfied === true) {
|
|
535
|
+
return { allowed: true, reason: 'permission-provider' };
|
|
536
|
+
}
|
|
537
|
+
}
|
|
247
538
|
const granted = await provider.hasPermission(user, ability, resource);
|
|
248
539
|
if (granted === true)
|
|
249
540
|
return { allowed: true, reason: 'permission-provider' };
|
|
@@ -259,17 +550,19 @@ let Gate = class Gate {
|
|
|
259
550
|
if (typeof method === 'function') {
|
|
260
551
|
const before = policy.before;
|
|
261
552
|
if (typeof before === 'function') {
|
|
262
|
-
const result = await before.call(policy, user, ability);
|
|
263
|
-
if (result === true)
|
|
264
|
-
return { allowed: true, reason: 'policy-before' };
|
|
265
|
-
if (result === false)
|
|
266
|
-
return { allowed: false, reason: 'policy-before' };
|
|
553
|
+
const result = normalizeResult(await before.call(policy, user, ability));
|
|
554
|
+
if (result.allowed === true)
|
|
555
|
+
return withMessage({ allowed: true, reason: 'policy-before' }, result.message);
|
|
556
|
+
if (result.allowed === false)
|
|
557
|
+
return withMessage({ allowed: false, reason: 'policy-before' }, result.message);
|
|
267
558
|
}
|
|
268
559
|
// Anonymous users are denied unless a hook granted access above.
|
|
269
560
|
if (maybeUser === NO_USER)
|
|
270
561
|
return { allowed: false, reason: 'anonymous' };
|
|
271
|
-
const
|
|
272
|
-
return
|
|
562
|
+
const result = normalizeResult((await method.call(policy, user, resource)));
|
|
563
|
+
// A nullish policy return is "no opinion" → leave `allowed` undefined so
|
|
564
|
+
// an `after` hook may decide; otherwise it default-denies in `resolve`.
|
|
565
|
+
return withMessage({ allowed: result.allowed, reason: 'policy' }, result.message);
|
|
273
566
|
}
|
|
274
567
|
}
|
|
275
568
|
// Fall back to an ad-hoc gate.
|
|
@@ -277,7 +570,8 @@ let Gate = class Gate {
|
|
|
277
570
|
if (gate) {
|
|
278
571
|
if (maybeUser === NO_USER)
|
|
279
572
|
return { allowed: false, reason: 'anonymous' };
|
|
280
|
-
|
|
573
|
+
const result = normalizeResult((await gate(user, resource)));
|
|
574
|
+
return withMessage({ allowed: result.allowed, reason: 'gate' }, result.message);
|
|
281
575
|
}
|
|
282
576
|
throw new AbilityNotResolvedException(ability);
|
|
283
577
|
}
|
|
@@ -334,10 +628,18 @@ export class BoundGate {
|
|
|
334
628
|
async denies(ability, resource) {
|
|
335
629
|
return !(await this.allows(ability, resource));
|
|
336
630
|
}
|
|
631
|
+
/** Batch-authorize many abilities for the bound user in one pass (see {@link Gate.allowsMany}). */
|
|
632
|
+
allowsMany(items) {
|
|
633
|
+
return this.gate.allowsManyForUser(this.user, items);
|
|
634
|
+
}
|
|
635
|
+
/** Resolve the query-scope constraint for the bound user (see {@link Gate.scope}). */
|
|
636
|
+
scope(entity, ability = 'viewAny') {
|
|
637
|
+
return this.gate.scopeForUser(this.user, entity, ability);
|
|
638
|
+
}
|
|
337
639
|
async authorize(ability, resource) {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
640
|
+
const decision = await this.gate.decideForUser(this.user, ability, resource);
|
|
641
|
+
if (!decision.allowed)
|
|
642
|
+
throw forbidden(ability, decision);
|
|
341
643
|
}
|
|
342
644
|
/** True when the bound user holds `role`. */
|
|
343
645
|
hasRole(role) {
|
package/dist/gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare const VERSION = "0.0.0";
|
|
2
2
|
export { Gate, BoundGate } from './gate.js';
|
|
3
|
+
export type { BatchAbility, BatchResult } from './gate.js';
|
|
4
|
+
export { PermissionCache } from './permission-cache.js';
|
|
3
5
|
export { authzDecisionChannel, publishAuthzDecision } from './diagnostics.js';
|
|
4
6
|
export type { AuthzDecisionDiagnostic, AuthzDecisionReason } from './diagnostics.js';
|
|
5
7
|
export { PolicyRegistry } from './policy-registry.js';
|
|
@@ -11,14 +13,17 @@ export { CanGuard } from './guard/can.guard.js';
|
|
|
11
13
|
export { RolesGuard } from './guard/roles.guard.js';
|
|
12
14
|
export { AuthzModule } from './module.js';
|
|
13
15
|
export { createCanController, DEFAULT_CAN_ENDPOINT_PATH, } from './can-endpoint.controller.js';
|
|
14
|
-
export type { CanRequestBody, CanResponseBody } from './can-endpoint.controller.js';
|
|
16
|
+
export type { CanRequestBody, CanResponseBody, CanBatchRequestBody, CanBatchResultItem, } from './can-endpoint.controller.js';
|
|
15
17
|
export { IdParamResourceResolver } from './resource-resolver.js';
|
|
16
18
|
export type { ResourceResolver } from './resource-resolver.js';
|
|
17
19
|
export type { ContextAccessor, ContextStore, UserRef } from './context-accessor.js';
|
|
18
20
|
export type { PermissionProvider } from './permission-provider.js';
|
|
19
21
|
export { defaultRoleResolver } from './role-provider.js';
|
|
20
22
|
export type { RoleProvider, RoleResolver } from './role-provider.js';
|
|
23
|
+
export { permissionMatches, permissionSatisfied } from './permission-matcher.js';
|
|
24
|
+
export { and, eq, normalizeScope, or, scopeAll, scopeNone, where, } from './scope.js';
|
|
25
|
+
export type { ScopeAll, ScopeCondition, ScopeConstraint, ScopeGroup, ScopeMethod, ScopeNode, ScopeNone, ScopeOperator, ScopeResult, } from './scope.js';
|
|
21
26
|
export { AUTHZ_MODULE_OPTIONS, RESOURCE_RESOLVER, RESOURCE_HYDRATOR, CONTEXT_ACCESSOR, PERMISSION_PROVIDER, ROLE_PROVIDER, POLICY_RESOURCE_METADATA, CAN_METADATA, ROLES_METADATA, } from './tokens.js';
|
|
22
27
|
export { AuthzException, PolicyNotDecoratedException, AbilityNotResolvedException, AmbiguousAbilityException, ResourceResolverMissingException, } from './errors/exceptions.js';
|
|
23
|
-
export type { AuthzModuleOptions, AuthzModuleAsyncOptions, AuthzModuleOptionsFactory, GateFn, PolicyBeforeHook, PolicyInstance, PolicyMethod, Resource, ResourceLoader, ResourceLoaderMap, SuperAdminHook, User, } from './types.js';
|
|
28
|
+
export type { AfterHook, AuthzModuleOptions, AuthzModuleAsyncOptions, AuthzModuleOptionsFactory, GateFn, PolicyBeforeHook, PolicyInstance, PolicyMethod, PolicyResponse, PolicyResult, Resource, ResourceLoader, ResourceLoaderMap, SuperAdminHook, User, } from './types.js';
|
|
24
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EACL,GAAG,EACH,EAAE,EACF,cAAc,EACd,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,WAAW,EACX,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACxB,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,IAAI,GACL,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const VERSION = '0.0.0';
|
|
2
2
|
export { Gate, BoundGate } from './gate.js';
|
|
3
|
+
export { PermissionCache } from './permission-cache.js';
|
|
3
4
|
export { authzDecisionChannel, publishAuthzDecision } from './diagnostics.js';
|
|
4
5
|
export { PolicyRegistry } from './policy-registry.js';
|
|
5
6
|
export { Policy, getPolicyResource } from './decorator/policy.decorator.js';
|
|
@@ -11,6 +12,8 @@ export { AuthzModule } from './module.js';
|
|
|
11
12
|
export { createCanController, DEFAULT_CAN_ENDPOINT_PATH, } from './can-endpoint.controller.js';
|
|
12
13
|
export { IdParamResourceResolver } from './resource-resolver.js';
|
|
13
14
|
export { defaultRoleResolver } from './role-provider.js';
|
|
15
|
+
export { permissionMatches, permissionSatisfied } from './permission-matcher.js';
|
|
16
|
+
export { and, eq, normalizeScope, or, scopeAll, scopeNone, where, } from './scope.js';
|
|
14
17
|
export { AUTHZ_MODULE_OPTIONS, RESOURCE_RESOLVER, RESOURCE_HYDRATOR, CONTEXT_ACCESSOR, PERMISSION_PROVIDER, ROLE_PROVIDER, POLICY_RESOURCE_METADATA, CAN_METADATA, ROLES_METADATA, } from './tokens.js';
|
|
15
18
|
export { AuthzException, PolicyNotDecoratedException, AbilityNotResolvedException, AmbiguousAbilityException, ResourceResolverMissingException, } from './errors/exceptions.js';
|
|
16
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EACL,GAAG,EACH,EAAE,EACF,cAAc,EACd,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACN,MAAM,YAAY,CAAC;AAYpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACxB,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC"}
|