@nest-boot/permission 7.3.6 → 8.0.0-beta.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/dist/decorators/can.decorator.d.ts +4 -17
- package/dist/decorators/can.decorator.js +5 -15
- package/dist/decorators/can.decorator.js.map +1 -1
- package/dist/enums/permission-action.enum.d.ts +0 -6
- package/dist/enums/permission-action.enum.js +2 -11
- package/dist/enums/permission-action.enum.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.js +16 -32
- package/dist/index.js.map +1 -1
- package/dist/interfaces/can-options.interface.d.ts +2 -5
- package/dist/interfaces/can-options.interface.js +1 -2
- package/dist/interfaces/permission-module-options.interface.d.ts +1 -3
- package/dist/interfaces/permission-module-options.interface.js +1 -2
- package/dist/interfaces/route-argument-metadata-value.interface.d.ts +0 -4
- package/dist/interfaces/route-argument-metadata-value.interface.js +1 -2
- package/dist/permission.ability-builder.d.ts +1 -3
- package/dist/permission.ability-builder.js +3 -9
- package/dist/permission.ability-builder.js.map +1 -1
- package/dist/permission.constants.d.ts +0 -24
- package/dist/permission.constants.js +7 -34
- package/dist/permission.constants.js.map +1 -1
- package/dist/permission.guard.d.ts +2 -22
- package/dist/permission.guard.js +40 -57
- package/dist/permission.guard.js.map +1 -1
- package/dist/permission.module-definition.d.ts +1 -3
- package/dist/permission.module-definition.js +4 -9
- package/dist/permission.module-definition.js.map +1 -1
- package/dist/permission.module.d.ts +1 -2
- package/dist/permission.module.js +10 -14
- package/dist/permission.module.js.map +1 -1
- package/dist/types/build-ability-callback.type.d.ts +1 -2
- package/dist/types/build-ability-callback.type.js +1 -2
- package/dist/types/can-subject-factory.type.d.ts +0 -1
- package/dist/types/can-subject-factory.type.js +1 -2
- package/dist/types/can-subject.type.d.ts +1 -2
- package/dist/types/can-subject.type.js +1 -2
- package/dist/types/permission-ability.type.d.ts +1 -2
- package/dist/types/permission-ability.type.js +1 -2
- package/dist/types/route-argument-metadata.type.d.ts +1 -2
- package/dist/types/route-argument-metadata.type.js +1 -2
- package/dist/utils/can.util.d.ts +1 -2
- package/dist/utils/can.util.js +3 -7
- package/dist/utils/can.util.js.map +1 -1
- package/dist/utils/get-permission-ability.util.d.ts +1 -2
- package/dist/utils/get-permission-ability.util.js +6 -11
- package/dist/utils/get-permission-ability.util.js.map +1 -1
- package/package.json +33 -25
- package/dist/decorators/can.decorator.spec.d.ts +0 -1
- package/dist/decorators/can.decorator.spec.js +0 -50
- package/dist/decorators/can.decorator.spec.js.map +0 -1
- package/dist/index.spec.d.ts +0 -0
- package/dist/index.spec.js +0 -47
- package/dist/index.spec.js.map +0 -1
- package/dist/permission.ability-builder.spec.d.ts +0 -1
- package/dist/permission.ability-builder.spec.js +0 -16
- package/dist/permission.ability-builder.spec.js.map +0 -1
- package/dist/permission.guard.spec.d.ts +0 -1
- package/dist/permission.guard.spec.js +0 -577
- package/dist/permission.guard.spec.js.map +0 -1
- package/dist/permission.module.spec.d.ts +0 -1
- package/dist/permission.module.spec.js +0 -12
- package/dist/permission.module.spec.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utils/can.util.spec.d.ts +0 -1
- package/dist/utils/can.util.spec.js +0 -34
- package/dist/utils/can.util.spec.js.map +0 -1
- package/dist/utils/get-permission-ability.util.spec.d.ts +0 -1
- package/dist/utils/get-permission-ability.util.spec.js +0 -27
- package/dist/utils/get-permission-ability.util.spec.js.map +0 -1
package/dist/permission.guard.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -11,44 +10,28 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
12
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const permission_constants_1 = require("./permission.constants");
|
|
20
|
-
const permission_module_definition_1 = require("./permission.module-definition");
|
|
21
|
-
/** Guard that evaluates CASL permissions from `Can` metadata. */
|
|
13
|
+
import { RequestContext } from "@nest-boot/request-context";
|
|
14
|
+
import { ForbiddenException, Inject, Injectable } from "@nestjs/common";
|
|
15
|
+
import { ContextIdFactory, ModuleRef, Reflector } from "@nestjs/core";
|
|
16
|
+
import { CAN_METADATA, CUSTOM_ROUTE_ARGS_METADATA, GQL_PARAM_TYPES, PERMISSION_ABILITY, PERMISSION_ABILITY_PROMISE, ROUTE_ARGS_METADATA, ROUTE_PARAM_TYPES, } from "./permission.constants.js";
|
|
17
|
+
import { MODULE_OPTIONS_TOKEN } from "./permission.module-definition.js";
|
|
22
18
|
let PermissionGuard = class PermissionGuard {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
* @param options - Permission module options.
|
|
28
|
-
*/
|
|
29
|
-
constructor(
|
|
30
|
-
/** Nest metadata reflector. */
|
|
31
|
-
reflector, options,
|
|
32
|
-
/** Nest module reference used to resolve the current handler instance. */
|
|
33
|
-
moduleRef) {
|
|
19
|
+
reflector;
|
|
20
|
+
options;
|
|
21
|
+
moduleRef;
|
|
22
|
+
constructor(reflector, options, moduleRef) {
|
|
34
23
|
this.reflector = reflector;
|
|
35
24
|
this.options = options;
|
|
36
25
|
this.moduleRef = moduleRef;
|
|
37
26
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Checks whether the current request satisfies the route permission metadata.
|
|
40
|
-
*
|
|
41
|
-
* @param context - Current Nest execution context.
|
|
42
|
-
* @returns `true` when access is allowed.
|
|
43
|
-
*/
|
|
44
27
|
async canActivate(context) {
|
|
45
|
-
const canOptions = this.reflector.getAllAndOverride(
|
|
28
|
+
const canOptions = this.reflector.getAllAndOverride(CAN_METADATA, [context.getHandler(), context.getClass()]);
|
|
46
29
|
if (!canOptions) {
|
|
47
30
|
return true;
|
|
48
31
|
}
|
|
49
32
|
const ability = await this.getOrBuildAbility(context);
|
|
50
33
|
if (!ability) {
|
|
51
|
-
throw new
|
|
34
|
+
throw new ForbiddenException("Permission ability is not available");
|
|
52
35
|
}
|
|
53
36
|
return ability.can(canOptions.action, await this.resolveSubject(canOptions, context));
|
|
54
37
|
}
|
|
@@ -64,19 +47,19 @@ let PermissionGuard = class PermissionGuard {
|
|
|
64
47
|
return this.buildAndCacheAbility(context);
|
|
65
48
|
}
|
|
66
49
|
getCachedAbility() {
|
|
67
|
-
return (
|
|
50
|
+
return (RequestContext.get(PERMISSION_ABILITY) ?? null);
|
|
68
51
|
}
|
|
69
52
|
getCachedAbilityPromise() {
|
|
70
|
-
return (
|
|
53
|
+
return (RequestContext.get(PERMISSION_ABILITY_PROMISE) ?? null);
|
|
71
54
|
}
|
|
72
55
|
buildAndCacheAbility(context) {
|
|
73
56
|
const abilityPromise = Promise.resolve()
|
|
74
57
|
.then(() => this.options.buildAbility(context))
|
|
75
58
|
.then((ability) => {
|
|
76
|
-
|
|
59
|
+
RequestContext.set(PERMISSION_ABILITY, ability);
|
|
77
60
|
return ability;
|
|
78
61
|
});
|
|
79
|
-
|
|
62
|
+
RequestContext.set(PERMISSION_ABILITY_PROMISE, abilityPromise);
|
|
80
63
|
return abilityPromise;
|
|
81
64
|
}
|
|
82
65
|
async resolveSubject(canOptions, context) {
|
|
@@ -104,7 +87,7 @@ let PermissionGuard = class PermissionGuard {
|
|
|
104
87
|
}
|
|
105
88
|
getContextId(context) {
|
|
106
89
|
const request = this.getRequest(context);
|
|
107
|
-
return request ?
|
|
90
|
+
return request ? ContextIdFactory.getByRequest(request) : undefined;
|
|
108
91
|
}
|
|
109
92
|
getRequest(context) {
|
|
110
93
|
switch (context.getType()) {
|
|
@@ -128,7 +111,7 @@ let PermissionGuard = class PermissionGuard {
|
|
|
128
111
|
if (!methodName) {
|
|
129
112
|
return null;
|
|
130
113
|
}
|
|
131
|
-
return (Reflect.getMetadata(
|
|
114
|
+
return (Reflect.getMetadata(ROUTE_ARGS_METADATA, context.getClass(), methodName) ?? null);
|
|
132
115
|
}
|
|
133
116
|
getHandlerMethodName(context) {
|
|
134
117
|
const handler = context.getHandler();
|
|
@@ -146,7 +129,7 @@ let PermissionGuard = class PermissionGuard {
|
|
|
146
129
|
return args;
|
|
147
130
|
}
|
|
148
131
|
extractRouteArgument(context, key, metadata) {
|
|
149
|
-
if (key.includes(
|
|
132
|
+
if (key.includes(CUSTOM_ROUTE_ARGS_METADATA) && metadata.factory) {
|
|
150
133
|
return metadata.factory(metadata.data, context);
|
|
151
134
|
}
|
|
152
135
|
const type = Number(key.split(":")[0]);
|
|
@@ -158,13 +141,13 @@ let PermissionGuard = class PermissionGuard {
|
|
|
158
141
|
resolveGraphqlRouteArgument(context, type, data) {
|
|
159
142
|
const args = context.getArgs();
|
|
160
143
|
switch (type) {
|
|
161
|
-
case
|
|
144
|
+
case GQL_PARAM_TYPES.ROOT:
|
|
162
145
|
return args[0];
|
|
163
|
-
case
|
|
146
|
+
case GQL_PARAM_TYPES.ARGS:
|
|
164
147
|
return this.getObjectValue(args[1], data);
|
|
165
|
-
case
|
|
148
|
+
case GQL_PARAM_TYPES.CONTEXT:
|
|
166
149
|
return this.getObjectValue(args[2], data);
|
|
167
|
-
case
|
|
150
|
+
case GQL_PARAM_TYPES.INFO:
|
|
168
151
|
return args[3];
|
|
169
152
|
default:
|
|
170
153
|
return undefined;
|
|
@@ -176,31 +159,31 @@ let PermissionGuard = class PermissionGuard {
|
|
|
176
159
|
const res = httpContext.getResponse();
|
|
177
160
|
const next = httpContext.getNext();
|
|
178
161
|
switch (type) {
|
|
179
|
-
case
|
|
162
|
+
case ROUTE_PARAM_TYPES.REQUEST:
|
|
180
163
|
return req;
|
|
181
|
-
case
|
|
164
|
+
case ROUTE_PARAM_TYPES.RESPONSE:
|
|
182
165
|
return res;
|
|
183
|
-
case
|
|
166
|
+
case ROUTE_PARAM_TYPES.NEXT:
|
|
184
167
|
return next;
|
|
185
|
-
case
|
|
168
|
+
case ROUTE_PARAM_TYPES.BODY:
|
|
186
169
|
return this.getObjectValue(this.getRecord(req).body, data);
|
|
187
|
-
case
|
|
170
|
+
case ROUTE_PARAM_TYPES.RAW_BODY:
|
|
188
171
|
return this.getRecord(req).rawBody;
|
|
189
|
-
case
|
|
172
|
+
case ROUTE_PARAM_TYPES.PARAM:
|
|
190
173
|
return this.getObjectValue(this.getRecord(req).params, data);
|
|
191
|
-
case
|
|
174
|
+
case ROUTE_PARAM_TYPES.HOST:
|
|
192
175
|
return this.getObjectValue(this.getRecord(req).hosts, data);
|
|
193
|
-
case
|
|
176
|
+
case ROUTE_PARAM_TYPES.QUERY:
|
|
194
177
|
return this.getObjectValue(this.getRecord(req).query, data);
|
|
195
|
-
case
|
|
178
|
+
case ROUTE_PARAM_TYPES.HEADERS:
|
|
196
179
|
return this.getObjectValue(this.getRecord(req).headers, data, true);
|
|
197
|
-
case
|
|
180
|
+
case ROUTE_PARAM_TYPES.SESSION:
|
|
198
181
|
return this.getRecord(req).session;
|
|
199
|
-
case
|
|
182
|
+
case ROUTE_PARAM_TYPES.FILE:
|
|
200
183
|
return this.getRecord(req)[this.getStringData(data) ?? "file"];
|
|
201
|
-
case
|
|
184
|
+
case ROUTE_PARAM_TYPES.FILES:
|
|
202
185
|
return this.getRecord(req).files;
|
|
203
|
-
case
|
|
186
|
+
case ROUTE_PARAM_TYPES.IP:
|
|
204
187
|
return this.getRecord(req).ip;
|
|
205
188
|
default:
|
|
206
189
|
return undefined;
|
|
@@ -223,10 +206,10 @@ let PermissionGuard = class PermissionGuard {
|
|
|
223
206
|
: {};
|
|
224
207
|
}
|
|
225
208
|
};
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
(
|
|
229
|
-
|
|
230
|
-
__metadata("design:paramtypes", [core_1.Reflector, Object, core_1.ModuleRef])
|
|
209
|
+
PermissionGuard = __decorate([
|
|
210
|
+
Injectable(),
|
|
211
|
+
__param(1, Inject(MODULE_OPTIONS_TOKEN)),
|
|
212
|
+
__metadata("design:paramtypes", [Reflector, Object, ModuleRef])
|
|
231
213
|
], PermissionGuard);
|
|
214
|
+
export { PermissionGuard };
|
|
232
215
|
//# sourceMappingURL=permission.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.guard.js","sourceRoot":"","sources":["../src/permission.guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permission.guard.js","sourceRoot":"","sources":["../src/permission.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMtE,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAOlE,IAAM,eAAe,GAArB,MAAM,eAAe;IASP;IAGA;IAEA;IAPnB,YAEmB,SAAoB,EAGpB,OAAgC,EAEhC,SAAoB;QALpB,cAAS,GAAT,SAAS,CAAW;QAGpB,YAAO,GAAP,OAAO,CAAyB;QAEhC,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAQJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CACjD,YAAY,EACZ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC3C,CAAC;QAEF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAChB,UAAU,CAAC,MAAM,EACjB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAC/C,CAAC;IACJ,CAAC;IAEO,iBAAiB,CACvB,OAAyB;QAEzB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE5D,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,gBAAgB;QACtB,OAAO,CACL,cAAc,CAAC,GAAG,CAA2B,kBAAkB,CAAC,IAAI,IAAI,CACzE,CAAC;IACJ,CAAC;IAEO,uBAAuB;QAC7B,OAAO,CACL,cAAc,CAAC,GAAG,CAChB,0BAA0B,CAC3B,IAAI,IAAI,CACV,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAC1B,OAAyB;QAEzB,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE;aACrC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;aAC9C,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEL,cAAc,CAAC,GAAG,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC;QAC/D,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,UAAsB,EACtB,OAAyB;QAEzB,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAE/B,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEO,aAAa,CACnB,OAA8B;QAE9B,OAAO,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,QAAiB,EACjB,OAAyB;QAEzB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YACxE,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,cAAiC,EACjC,OAAyB;QAEzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEvD,OAAO,MAAM,cAAc,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,OAAyB;QAEzB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAEO,YAAY,CAAC,OAAyB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,CAAC;IAEO,UAAU,CAAC,OAAyB;QAC1C,QAAQ,OAAO,CAAC,OAAO,EAAU,EAAE,CAAC;YAClC,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAuB,CAAC;YAClE,KAAK,SAAS;gBACZ,OAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAmC,EAAE,GAAG,CAAC;YACtE;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,OAAyB;QAEzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE7D,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,oBAAoB,CAC1B,OAAyB;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,OAAO,CAAC,WAAW,CACjB,mBAAmB,EACnB,OAAO,CAAC,QAAQ,EAAE,EAClB,UAAU,CACX,IAAI,IAAI,CACV,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAC1B,OAAyB;QAEzB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAErC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAC5C,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAC7B,CAAC,IAAI,CACJ,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,OAAO,CACzE,CAAC;QAEF,OAAO,WAAW,IAAI,IAAI,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,OAAyB,EACzB,QAA+B;QAE/B,MAAM,IAAI,GAAc,EAAE,CAAC;QAE3B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE;YAC9D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC7D,OAAO,EACP,GAAG,EACH,iBAAiB,CAClB,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,oBAAoB,CAC1B,OAAyB,EACzB,GAAW,EACX,QAAoC;QAEpC,IAAI,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,OAAO,CAAC,OAAO,EAAU,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAEO,2BAA2B,CACjC,OAAyB,EACzB,IAAY,EACZ,IAAa;QAEb,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAE/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,eAAe,CAAC,IAAI;gBACvB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,KAAK,eAAe,CAAC,IAAI;gBACvB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,KAAK,eAAe,CAAC,OAAO;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,KAAK,eAAe,CAAC,IAAI;gBACvB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,wBAAwB,CAC9B,OAAyB,EACzB,IAAY,EACZ,IAAa;QAEb,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;QAEnC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,iBAAiB,CAAC,OAAO;gBAC5B,OAAO,GAAG,CAAC;YACb,KAAK,iBAAiB,CAAC,QAAQ;gBAC7B,OAAO,GAAG,CAAC;YACb,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,IAAI,CAAC;YACd,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,KAAK,iBAAiB,CAAC,QAAQ;gBAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACrC,KAAK,iBAAiB,CAAC,KAAK;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/D,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9D,KAAK,iBAAiB,CAAC,KAAK;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9D,KAAK,iBAAiB,CAAC,OAAO;gBAC5B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACtE,KAAK,iBAAiB,CAAC,OAAO;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACrC,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;YACjE,KAAK,iBAAiB,CAAC,KAAK;gBAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACnC,KAAK,iBAAiB,CAAC,EAAE;gBACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChC;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,KAAc,EACd,IAAa,EACb,YAAY,GAAG,KAAK;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAEO,aAAa,CAAC,IAAa;QACjC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAEO,SAAS,CAAC,KAAc;QAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YACvC,CAAC,CAAE,KAAiC;YACpC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;CACF,CAAA;AAnUY,eAAe;IAD3B,UAAU,EAAE;IAWR,WAAA,MAAM,CAAC,oBAAoB,CAAC,CAAA;qCADD,SAAS,UAKT,SAAS;GAd5B,eAAe,CAmU3B"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type { PermissionModuleOptions } from "./interfaces/permission-module-options.interface";
|
|
2
|
-
/** Configurable module base class for `PermissionModule`. */
|
|
1
|
+
import type { PermissionModuleOptions } from "./interfaces/permission-module-options.interface.js";
|
|
3
2
|
export declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<PermissionModuleOptions, "forRoot", "create", {}>;
|
|
4
|
-
/** Injection token for permission module options. */
|
|
5
3
|
export declare const MODULE_OPTIONS_TOKEN: string | symbol;
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.MODULE_OPTIONS_TOKEN = exports.ConfigurableModuleClass = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const moduleDefinition = new common_1.ConfigurableModuleBuilder()
|
|
1
|
+
import { ConfigurableModuleBuilder } from "@nestjs/common";
|
|
2
|
+
const moduleDefinition = new ConfigurableModuleBuilder()
|
|
6
3
|
.setClassMethodName("forRoot")
|
|
7
4
|
.build();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/** Injection token for permission module options. */
|
|
11
|
-
exports.MODULE_OPTIONS_TOKEN = moduleDefinition.MODULE_OPTIONS_TOKEN;
|
|
5
|
+
export const ConfigurableModuleClass = moduleDefinition.ConfigurableModuleClass;
|
|
6
|
+
export const MODULE_OPTIONS_TOKEN = moduleDefinition.MODULE_OPTIONS_TOKEN;
|
|
12
7
|
//# sourceMappingURL=permission.module-definition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.module-definition.js","sourceRoot":"","sources":["../src/permission.module-definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permission.module-definition.js","sourceRoot":"","sources":["../src/permission.module-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAI3D,MAAM,gBAAgB,GACpB,IAAI,yBAAyB,EAA2B;KACrD,kBAAkB,CAAC,SAAS,CAAC;KAC7B,KAAK,EAAE,CAAC;AAGb,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC;AAGhF,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ConfigurableModuleClass } from "./permission.module-definition";
|
|
2
|
-
/** Global module that provides the permission guard. */
|
|
1
|
+
import { ConfigurableModuleClass } from "./permission.module-definition.js";
|
|
3
2
|
export declare class PermissionModule extends ConfigurableModuleClass {
|
|
4
3
|
}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
6
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const permission_module_definition_1 = require("./permission.module-definition");
|
|
13
|
-
/** Global module that provides the permission guard. */
|
|
14
|
-
let PermissionModule = class PermissionModule extends permission_module_definition_1.ConfigurableModuleClass {
|
|
7
|
+
import { Global, Module } from "@nestjs/common";
|
|
8
|
+
import { PermissionGuard } from "./permission.guard.js";
|
|
9
|
+
import { ConfigurableModuleClass } from "./permission.module-definition.js";
|
|
10
|
+
let PermissionModule = class PermissionModule extends ConfigurableModuleClass {
|
|
15
11
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
exports: [permission_guard_1.PermissionGuard],
|
|
12
|
+
PermissionModule = __decorate([
|
|
13
|
+
Global(),
|
|
14
|
+
Module({
|
|
15
|
+
providers: [PermissionGuard],
|
|
16
|
+
exports: [PermissionGuard],
|
|
22
17
|
})
|
|
23
18
|
], PermissionModule);
|
|
19
|
+
export { PermissionModule };
|
|
24
20
|
//# sourceMappingURL=permission.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.module.js","sourceRoot":"","sources":["../src/permission.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permission.module.js","sourceRoot":"","sources":["../src/permission.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAQrE,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,uBAAuB;CAAG,CAAA;AAAnD,gBAAgB;IAL5B,MAAM,EAAE;IACR,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,eAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,eAAe,CAAC;KAC3B,CAAC;GACW,gBAAgB,CAAmC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ExecutionContext } from "@nestjs/common";
|
|
2
|
-
import type { PermissionAbility } from "./permission-ability.type";
|
|
3
|
-
/** Callback used to build the permission ability for the current execution context. */
|
|
2
|
+
import type { PermissionAbility } from "./permission-ability.type.js";
|
|
4
3
|
export type BuildAbilityCallback = (ctx: ExecutionContext) => PermissionAbility | null | Promise<PermissionAbility | null>;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import type { Subject } from "@casl/ability";
|
|
2
|
-
/** Factory that resolves a permission subject from the current handler instance and decorated method parameters. */
|
|
3
2
|
export type CanSubjectFactory<T extends Subject = Subject, TSelf = unknown, TArgs extends unknown[] = unknown[]> = (self: TSelf, ...args: TArgs) => T | Promise<T>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Subject } from "@casl/ability";
|
|
2
2
|
import type { Type } from "@nestjs/common";
|
|
3
|
-
import type { CanSubjectFactory } from "./can-subject-factory.type";
|
|
4
|
-
/** Permission subject type or subject resolver factory. */
|
|
3
|
+
import type { CanSubjectFactory } from "./can-subject-factory.type.js";
|
|
5
4
|
export type CanSubject<T extends Subject = Subject> = Type<T> | CanSubjectFactory<T>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { MongoAbility, Subject } from "@casl/ability";
|
|
2
|
-
import type { PermissionAction } from "../enums/permission-action.enum";
|
|
3
|
-
/** CASL ability type used by the permission module. */
|
|
2
|
+
import type { PermissionAction } from "../enums/permission-action.enum.js";
|
|
4
3
|
export type PermissionAbility = MongoAbility<[PermissionAction, Subject]>;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import type { RouteArgumentMetadataValue } from "../interfaces/route-argument-metadata-value.interface";
|
|
2
|
-
/** Nest route arguments metadata map keyed by route parameter metadata token. */
|
|
1
|
+
import type { RouteArgumentMetadataValue } from "../interfaces/route-argument-metadata-value.interface.js";
|
|
3
2
|
export type RouteArgumentMetadata = Record<string, RouteArgumentMetadataValue>;
|
package/dist/utils/can.util.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { Subject } from "@casl/ability";
|
|
2
|
-
import type { PermissionAction } from "../enums/permission-action.enum";
|
|
3
|
-
/** Checks a permission with the ability prepared for the current request. */
|
|
2
|
+
import type { PermissionAction } from "../enums/permission-action.enum.js";
|
|
4
3
|
export declare function can(action: PermissionAction, subject: Subject): boolean;
|
package/dist/utils/can.util.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const get_permission_ability_util_1 = require("./get-permission-ability.util");
|
|
5
|
-
/** Checks a permission with the ability prepared for the current request. */
|
|
6
|
-
function can(action, subject) {
|
|
7
|
-
return (0, get_permission_ability_util_1.getPermissionAbility)().can(action, subject);
|
|
1
|
+
import { getPermissionAbility } from "./get-permission-ability.util.js";
|
|
2
|
+
export function can(action, subject) {
|
|
3
|
+
return getPermissionAbility().can(action, subject);
|
|
8
4
|
}
|
|
9
5
|
//# sourceMappingURL=can.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"can.util.js","sourceRoot":"","sources":["../../src/utils/can.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"can.util.js","sourceRoot":"","sources":["../../src/utils/can.util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAGxE,MAAM,UAAU,GAAG,CAAC,MAAwB,EAAE,OAAgB;IAC5D,OAAO,oBAAoB,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import type { PermissionAbility } from "../types/permission-ability.type";
|
|
2
|
-
/** Reads the permission ability prepared for the current request. */
|
|
1
|
+
import type { PermissionAbility } from "../types/permission-ability.type.js";
|
|
3
2
|
export declare const getPermissionAbility: () => PermissionAbility;
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const permission_constants_1 = require("../permission.constants");
|
|
7
|
-
/** Reads the permission ability prepared for the current request. */
|
|
8
|
-
const getPermissionAbility = () => {
|
|
9
|
-
const ability = request_context_1.RequestContext.get(permission_constants_1.PERMISSION_ABILITY) ?? null;
|
|
1
|
+
import { RequestContext } from "@nest-boot/request-context";
|
|
2
|
+
import { ForbiddenException } from "@nestjs/common";
|
|
3
|
+
import { PERMISSION_ABILITY } from "../permission.constants.js";
|
|
4
|
+
export const getPermissionAbility = () => {
|
|
5
|
+
const ability = RequestContext.get(PERMISSION_ABILITY) ?? null;
|
|
10
6
|
if (!ability) {
|
|
11
|
-
throw new
|
|
7
|
+
throw new ForbiddenException("Permission ability is not available");
|
|
12
8
|
}
|
|
13
9
|
return ability;
|
|
14
10
|
};
|
|
15
|
-
exports.getPermissionAbility = getPermissionAbility;
|
|
16
11
|
//# sourceMappingURL=get-permission-ability.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-permission-ability.util.js","sourceRoot":"","sources":["../../src/utils/get-permission-ability.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-permission-ability.util.js","sourceRoot":"","sources":["../../src/utils/get-permission-ability.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAsB,EAAE;IAC1D,MAAM,OAAO,GACX,cAAc,CAAC,GAAG,CAAoB,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nest-boot/permission",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0-beta.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/nest-boot/nest-boot.git",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
},
|
|
15
15
|
"homepage": "",
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"main": "dist/index.js",
|
|
18
|
-
"types": "dist/index.d.ts",
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
19
|
"directories": {
|
|
20
20
|
"lib": "dist"
|
|
21
21
|
},
|
|
@@ -24,32 +24,32 @@
|
|
|
24
24
|
],
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@casl/ability": "^6.0.0",
|
|
27
|
-
"@
|
|
28
|
-
"@nestjs/
|
|
29
|
-
"@nestjs/core": "^11.0.0",
|
|
27
|
+
"@nestjs/common": "^12.0.0",
|
|
28
|
+
"@nestjs/core": "^12.0.0",
|
|
30
29
|
"express": "^5.0.0",
|
|
31
30
|
"reflect-metadata": "^0.2.2",
|
|
32
|
-
"rxjs": "^7.0.0"
|
|
31
|
+
"rxjs": "^7.0.0",
|
|
32
|
+
"@nest-boot/request-context": "^8.0.0-beta.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@casl/ability": "^6.7.5",
|
|
36
|
-
"@nestjs/common": "^
|
|
37
|
-
"@nestjs/core": "^
|
|
38
|
-
"@nestjs/testing": "^
|
|
36
|
+
"@nestjs/common": "^12.0.1",
|
|
37
|
+
"@nestjs/core": "^12.0.1",
|
|
38
|
+
"@nestjs/testing": "^12.0.1",
|
|
39
39
|
"@types/express": "^5.0.3",
|
|
40
|
-
"@types/
|
|
41
|
-
"@
|
|
40
|
+
"@types/node": "^26.0.0",
|
|
41
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
42
42
|
"eslint": "^9.39.3",
|
|
43
43
|
"express": "^5.1.0",
|
|
44
|
-
"jest": "^29.7.0",
|
|
45
44
|
"reflect-metadata": "^0.2.2",
|
|
46
45
|
"rxjs": "^7.8.2",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"@nest-boot/eslint-
|
|
51
|
-
"@nest-boot/
|
|
52
|
-
"@nest-boot/
|
|
46
|
+
"typescript": "^6.0.3",
|
|
47
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
48
|
+
"vitest": "^4.1.11",
|
|
49
|
+
"@nest-boot/eslint-config": "^8.0.0-beta.1",
|
|
50
|
+
"@nest-boot/eslint-plugin": "^8.0.0-beta.1",
|
|
51
|
+
"@nest-boot/request-context": "^8.0.0-beta.1",
|
|
52
|
+
"@nest-boot/tsconfig": "^8.0.0-beta.1"
|
|
53
53
|
},
|
|
54
54
|
"publishConfig": {
|
|
55
55
|
"access": "public"
|
|
@@ -60,8 +60,16 @@
|
|
|
60
60
|
"eslint --fix"
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
|
-
"
|
|
64
|
-
|
|
63
|
+
"type": "module",
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=26.0.0"
|
|
66
|
+
},
|
|
67
|
+
"exports": {
|
|
68
|
+
".": {
|
|
69
|
+
"types": "./dist/index.d.ts",
|
|
70
|
+
"import": "./dist/index.js"
|
|
71
|
+
},
|
|
72
|
+
"./package.json": "./package.json"
|
|
65
73
|
},
|
|
66
74
|
"scripts": {
|
|
67
75
|
"build": "tsc -p tsconfig.build.json",
|
|
@@ -69,9 +77,9 @@
|
|
|
69
77
|
"dev": "tsc -w -p tsconfig.build.json",
|
|
70
78
|
"lint": "eslint \"{src,test}/**/*.ts\"",
|
|
71
79
|
"lint:fix": "eslint \"{src,test}/**/*.ts\" --fix",
|
|
72
|
-
"test": "
|
|
73
|
-
"test:cov": "
|
|
74
|
-
"test:watch": "
|
|
75
|
-
"test:debug": "
|
|
80
|
+
"test": "vitest run",
|
|
81
|
+
"test:cov": "vitest run --coverage",
|
|
82
|
+
"test:watch": "vitest",
|
|
83
|
+
"test:debug": "vitest --inspect-brk --no-file-parallelism"
|
|
76
84
|
}
|
|
77
85
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const common_1 = require("@nestjs/common");
|
|
4
|
-
const permission_action_enum_1 = require("../enums/permission-action.enum");
|
|
5
|
-
const permission_constants_1 = require("../permission.constants");
|
|
6
|
-
const can_decorator_1 = require("./can.decorator");
|
|
7
|
-
jest.mock("@nestjs/common", () => ({
|
|
8
|
-
SetMetadata: jest.fn((key, value) => ({ key, value })),
|
|
9
|
-
}));
|
|
10
|
-
class Subject {
|
|
11
|
-
}
|
|
12
|
-
describe("Can", () => {
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
jest.mocked(common_1.SetMetadata).mockClear();
|
|
15
|
-
});
|
|
16
|
-
it("stores action and subject metadata from positional arguments", () => {
|
|
17
|
-
expect((0, can_decorator_1.Can)(permission_action_enum_1.PermissionAction.READ, Subject)).toEqual({
|
|
18
|
-
key: permission_constants_1.CAN_METADATA,
|
|
19
|
-
value: {
|
|
20
|
-
action: permission_action_enum_1.PermissionAction.READ,
|
|
21
|
-
subject: Subject,
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it("stores subject factory as positional subject argument", () => {
|
|
26
|
-
const subjectFactory = jest.fn();
|
|
27
|
-
expect((0, can_decorator_1.Can)(permission_action_enum_1.PermissionAction.READ, subjectFactory)).toEqual({
|
|
28
|
-
key: permission_constants_1.CAN_METADATA,
|
|
29
|
-
value: {
|
|
30
|
-
action: permission_action_enum_1.PermissionAction.READ,
|
|
31
|
-
subject: subjectFactory,
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
it("stores full permission options when an options object is provided", () => {
|
|
36
|
-
const options = {
|
|
37
|
-
action: permission_action_enum_1.PermissionAction.UPDATE,
|
|
38
|
-
subject: Subject,
|
|
39
|
-
};
|
|
40
|
-
expect((0, can_decorator_1.Can)(options)).toEqual({
|
|
41
|
-
key: permission_constants_1.CAN_METADATA,
|
|
42
|
-
value: options,
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it("throws when positional arguments omit the subject", () => {
|
|
46
|
-
expect(() => (0, can_decorator_1.Can)(permission_action_enum_1.PermissionAction.READ)).toThrow("Permission subject is required.");
|
|
47
|
-
expect(common_1.SetMetadata).not.toHaveBeenCalled();
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=can.decorator.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"can.decorator.spec.js","sourceRoot":"","sources":["../../src/decorators/can.decorator.spec.ts"],"names":[],"mappings":";;AAAA,2CAA6C;AAE7C,4EAAmE;AACnE,kEAAuD;AACvD,mDAAsC;AAEtC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;CACvD,CAAC,CAAC,CAAC;AAEJ,MAAM,OAAO;CAAG;AAEhB,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,MAAM,CAAC,oBAAW,CAAC,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,IAAA,mBAAG,EAAC,yCAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAClD,GAAG,EAAE,mCAAY;YACjB,KAAK,EAAE;gBACL,MAAM,EAAE,yCAAgB,CAAC,IAAI;gBAC7B,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEjC,MAAM,CAAC,IAAA,mBAAG,EAAC,yCAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;YACzD,GAAG,EAAE,mCAAY;YACjB,KAAK,EAAE;gBACL,MAAM,EAAE,yCAAgB,CAAC,IAAI;gBAC7B,OAAO,EAAE,cAAc;aACxB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,yCAAgB,CAAC,MAAM;YAC/B,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,MAAM,CAAC,IAAA,mBAAG,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3B,GAAG,EAAE,mCAAY;YACjB,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,mBAAG,EAAC,yCAAgB,CAAC,IAAa,CAAC,CAAC,CAAC,OAAO,CACvD,iCAAiC,CAClC,CAAC;QACF,MAAM,CAAC,oBAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.spec.d.ts
DELETED
|
File without changes
|