@nest-boot/permission 7.0.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.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/dist/decorators/can.decorator.d.ts +21 -0
  3. package/dist/decorators/can.decorator.js +26 -0
  4. package/dist/decorators/can.decorator.js.map +1 -0
  5. package/dist/decorators/can.decorator.spec.d.ts +1 -0
  6. package/dist/decorators/can.decorator.spec.js +46 -0
  7. package/dist/decorators/can.decorator.spec.js.map +1 -0
  8. package/dist/enums/permission-action.enum.d.ts +13 -0
  9. package/dist/enums/permission-action.enum.js +18 -0
  10. package/dist/enums/permission-action.enum.js.map +1 -0
  11. package/dist/index.d.ts +16 -0
  12. package/dist/index.js +33 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/interfaces/can-options.interface.d.ts +10 -0
  15. package/dist/interfaces/can-options.interface.js +3 -0
  16. package/dist/interfaces/can-options.interface.js.map +1 -0
  17. package/dist/interfaces/permission-module-options.interface.d.ts +6 -0
  18. package/dist/interfaces/permission-module-options.interface.js +3 -0
  19. package/dist/interfaces/permission-module-options.interface.js.map +1 -0
  20. package/dist/interfaces/route-argument-metadata-value.interface.d.ts +10 -0
  21. package/dist/interfaces/route-argument-metadata-value.interface.js +3 -0
  22. package/dist/interfaces/route-argument-metadata-value.interface.js.map +1 -0
  23. package/dist/permission.ability-builder.d.ts +7 -0
  24. package/dist/permission.ability-builder.js +13 -0
  25. package/dist/permission.ability-builder.js.map +1 -0
  26. package/dist/permission.constants.d.ts +50 -0
  27. package/dist/permission.constants.js +54 -0
  28. package/dist/permission.constants.js.map +1 -0
  29. package/dist/permission.guard.d.ts +51 -0
  30. package/dist/permission.guard.js +232 -0
  31. package/dist/permission.guard.js.map +1 -0
  32. package/dist/permission.guard.spec.d.ts +1 -0
  33. package/dist/permission.guard.spec.js +358 -0
  34. package/dist/permission.guard.spec.js.map +1 -0
  35. package/dist/permission.module-definition.d.ts +5 -0
  36. package/dist/permission.module-definition.js +12 -0
  37. package/dist/permission.module-definition.js.map +1 -0
  38. package/dist/permission.module.d.ts +4 -0
  39. package/dist/permission.module.js +24 -0
  40. package/dist/permission.module.js.map +1 -0
  41. package/dist/permission.module.spec.d.ts +1 -0
  42. package/dist/permission.module.spec.js +12 -0
  43. package/dist/permission.module.spec.js.map +1 -0
  44. package/dist/tsconfig.build.tsbuildinfo +1 -0
  45. package/dist/types/build-ability-callback.type.d.ts +4 -0
  46. package/dist/types/build-ability-callback.type.js +3 -0
  47. package/dist/types/build-ability-callback.type.js.map +1 -0
  48. package/dist/types/can-subject-factory.type.d.ts +3 -0
  49. package/dist/types/can-subject-factory.type.js +3 -0
  50. package/dist/types/can-subject-factory.type.js.map +1 -0
  51. package/dist/types/can-subject.type.d.ts +5 -0
  52. package/dist/types/can-subject.type.js +3 -0
  53. package/dist/types/can-subject.type.js.map +1 -0
  54. package/dist/types/permission-ability.type.d.ts +4 -0
  55. package/dist/types/permission-ability.type.js +3 -0
  56. package/dist/types/permission-ability.type.js.map +1 -0
  57. package/dist/types/route-argument-metadata.type.d.ts +3 -0
  58. package/dist/types/route-argument-metadata.type.js +3 -0
  59. package/dist/types/route-argument-metadata.type.js.map +1 -0
  60. package/dist/utils/can.util.d.ts +4 -0
  61. package/dist/utils/can.util.js +9 -0
  62. package/dist/utils/can.util.js.map +1 -0
  63. package/dist/utils/can.util.spec.d.ts +1 -0
  64. package/dist/utils/can.util.spec.js +34 -0
  65. package/dist/utils/can.util.spec.js.map +1 -0
  66. package/dist/utils/get-permission-ability.util.d.ts +3 -0
  67. package/dist/utils/get-permission-ability.util.js +16 -0
  68. package/dist/utils/get-permission-ability.util.js.map +1 -0
  69. package/dist/utils/get-permission-ability.util.spec.d.ts +1 -0
  70. package/dist/utils/get-permission-ability.util.spec.js +27 -0
  71. package/dist/utils/get-permission-ability.util.spec.js.map +1 -0
  72. package/package.json +76 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PermissionGuard = void 0;
16
+ const request_context_1 = require("@nest-boot/request-context");
17
+ const common_1 = require("@nestjs/common");
18
+ const core_1 = require("@nestjs/core");
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. */
22
+ let PermissionGuard = class PermissionGuard {
23
+ /**
24
+ * Creates the permission guard.
25
+ *
26
+ * @param reflector - Nest metadata reflector.
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) {
34
+ this.reflector = reflector;
35
+ this.options = options;
36
+ this.moduleRef = moduleRef;
37
+ }
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
+ async canActivate(context) {
45
+ const canOptions = this.reflector.getAllAndOverride(permission_constants_1.CAN_METADATA, [context.getHandler(), context.getClass()]);
46
+ if (!canOptions) {
47
+ return true;
48
+ }
49
+ const ability = await this.getOrBuildAbility(context);
50
+ if (!ability) {
51
+ throw new common_1.ForbiddenException("Permission ability is not available");
52
+ }
53
+ return ability.can(canOptions.action, await this.resolveSubject(canOptions, context));
54
+ }
55
+ getOrBuildAbility(context) {
56
+ const cachedAbility = this.getCachedAbility();
57
+ if (cachedAbility) {
58
+ return Promise.resolve(cachedAbility);
59
+ }
60
+ const cachedAbilityPromise = this.getCachedAbilityPromise();
61
+ if (cachedAbilityPromise) {
62
+ return cachedAbilityPromise;
63
+ }
64
+ return this.buildAndCacheAbility(context);
65
+ }
66
+ getCachedAbility() {
67
+ return (request_context_1.RequestContext.get(permission_constants_1.PERMISSION_ABILITY) ?? null);
68
+ }
69
+ getCachedAbilityPromise() {
70
+ return (request_context_1.RequestContext.get(permission_constants_1.PERMISSION_ABILITY_PROMISE) ?? null);
71
+ }
72
+ buildAndCacheAbility(context) {
73
+ const abilityPromise = Promise.resolve()
74
+ .then(() => this.options.buildAbility(context))
75
+ .then((ability) => {
76
+ request_context_1.RequestContext.set(permission_constants_1.PERMISSION_ABILITY, ability);
77
+ return ability;
78
+ });
79
+ request_context_1.RequestContext.set(permission_constants_1.PERMISSION_ABILITY_PROMISE, abilityPromise);
80
+ return abilityPromise;
81
+ }
82
+ async resolveSubject(canOptions, context) {
83
+ const { subject } = canOptions;
84
+ if (this.isSubjectType(subject)) {
85
+ return subject;
86
+ }
87
+ return await this.resolveSubjectFactory(subject, context);
88
+ }
89
+ isSubjectType(subject) {
90
+ return Function.prototype.toString.call(subject).startsWith("class ");
91
+ }
92
+ async resolveProvider(provider, context) {
93
+ return await this.moduleRef.resolve(provider, this.getContextId(context), {
94
+ strict: false,
95
+ });
96
+ }
97
+ async resolveSubjectFactory(subjectFactory, context) {
98
+ const handlerSelf = await this.resolveHandlerSelf(context);
99
+ const args = await this.getSubjectFactoryArgs(context);
100
+ return await subjectFactory(handlerSelf, ...args);
101
+ }
102
+ async resolveHandlerSelf(context) {
103
+ return await this.resolveProvider(context.getClass(), context);
104
+ }
105
+ getContextId(context) {
106
+ const request = this.getRequest(context);
107
+ return request ? core_1.ContextIdFactory.getByRequest(request) : undefined;
108
+ }
109
+ getRequest(context) {
110
+ switch (context.getType()) {
111
+ case "http":
112
+ return context.switchToHttp().getRequest();
113
+ case "graphql":
114
+ return context.getArgs()[2]?.req;
115
+ default:
116
+ return undefined;
117
+ }
118
+ }
119
+ async getSubjectFactoryArgs(context) {
120
+ const routeArgsMetadata = this.getRouteArgsMetadata(context);
121
+ if (routeArgsMetadata) {
122
+ return await this.createRouteArguments(context, routeArgsMetadata);
123
+ }
124
+ return [];
125
+ }
126
+ getRouteArgsMetadata(context) {
127
+ const methodName = this.getHandlerMethodName(context);
128
+ if (!methodName) {
129
+ return null;
130
+ }
131
+ return (Reflect.getMetadata(permission_constants_1.ROUTE_ARGS_METADATA, context.getClass(), methodName) ?? null);
132
+ }
133
+ getHandlerMethodName(context) {
134
+ const handler = context.getHandler();
135
+ if (handler.name) {
136
+ return handler.name;
137
+ }
138
+ const handlerName = Object.getOwnPropertyNames(context.getClass().prototype).find((propertyName) => context.getClass().prototype[propertyName] === handler);
139
+ return handlerName ?? null;
140
+ }
141
+ async createRouteArguments(context, metadata) {
142
+ const args = [];
143
+ await Promise.all(Object.entries(metadata).map(async ([key, parameterMetadata]) => {
144
+ args[parameterMetadata.index] = await this.extractRouteArgument(context, key, parameterMetadata);
145
+ }));
146
+ return args;
147
+ }
148
+ extractRouteArgument(context, key, metadata) {
149
+ if (key.includes(permission_constants_1.CUSTOM_ROUTE_ARGS_METADATA) && metadata.factory) {
150
+ return metadata.factory(metadata.data, context);
151
+ }
152
+ const type = Number(key.split(":")[0]);
153
+ if (context.getType() === "graphql") {
154
+ return this.resolveGraphqlRouteArgument(context, type, metadata.data);
155
+ }
156
+ return this.resolveHttpRouteArgument(context, type, metadata.data);
157
+ }
158
+ resolveGraphqlRouteArgument(context, type, data) {
159
+ const args = context.getArgs();
160
+ switch (type) {
161
+ case permission_constants_1.GQL_PARAM_TYPES.ROOT:
162
+ return args[0];
163
+ case permission_constants_1.GQL_PARAM_TYPES.ARGS:
164
+ return this.getObjectValue(args[1], data);
165
+ case permission_constants_1.GQL_PARAM_TYPES.CONTEXT:
166
+ return this.getObjectValue(args[2], data);
167
+ case permission_constants_1.GQL_PARAM_TYPES.INFO:
168
+ return args[3];
169
+ default:
170
+ return undefined;
171
+ }
172
+ }
173
+ resolveHttpRouteArgument(context, type, data) {
174
+ const httpContext = context.switchToHttp();
175
+ const req = httpContext.getRequest();
176
+ const res = httpContext.getResponse();
177
+ const next = httpContext.getNext();
178
+ switch (type) {
179
+ case permission_constants_1.ROUTE_PARAM_TYPES.REQUEST:
180
+ return req;
181
+ case permission_constants_1.ROUTE_PARAM_TYPES.RESPONSE:
182
+ return res;
183
+ case permission_constants_1.ROUTE_PARAM_TYPES.NEXT:
184
+ return next;
185
+ case permission_constants_1.ROUTE_PARAM_TYPES.BODY:
186
+ return this.getObjectValue(this.getRecord(req).body, data);
187
+ case permission_constants_1.ROUTE_PARAM_TYPES.RAW_BODY:
188
+ return this.getRecord(req).rawBody;
189
+ case permission_constants_1.ROUTE_PARAM_TYPES.PARAM:
190
+ return this.getObjectValue(this.getRecord(req).params, data);
191
+ case permission_constants_1.ROUTE_PARAM_TYPES.HOST:
192
+ return this.getObjectValue(this.getRecord(req).hosts, data);
193
+ case permission_constants_1.ROUTE_PARAM_TYPES.QUERY:
194
+ return this.getObjectValue(this.getRecord(req).query, data);
195
+ case permission_constants_1.ROUTE_PARAM_TYPES.HEADERS:
196
+ return this.getObjectValue(this.getRecord(req).headers, data, true);
197
+ case permission_constants_1.ROUTE_PARAM_TYPES.SESSION:
198
+ return this.getRecord(req).session;
199
+ case permission_constants_1.ROUTE_PARAM_TYPES.FILE:
200
+ return this.getRecord(req)[this.getStringData(data) ?? "file"];
201
+ case permission_constants_1.ROUTE_PARAM_TYPES.FILES:
202
+ return this.getRecord(req).files;
203
+ case permission_constants_1.ROUTE_PARAM_TYPES.IP:
204
+ return this.getRecord(req).ip;
205
+ default:
206
+ return undefined;
207
+ }
208
+ }
209
+ getObjectValue(value, data, normalizeKey = false) {
210
+ const record = this.getRecord(value);
211
+ const key = this.getStringData(data);
212
+ if (!key) {
213
+ return value;
214
+ }
215
+ return record[normalizeKey ? key.toLowerCase() : key];
216
+ }
217
+ getStringData(data) {
218
+ return typeof data === "string" ? data : null;
219
+ }
220
+ getRecord(value) {
221
+ return value && typeof value === "object"
222
+ ? value
223
+ : {};
224
+ }
225
+ };
226
+ exports.PermissionGuard = PermissionGuard;
227
+ exports.PermissionGuard = PermissionGuard = __decorate([
228
+ (0, common_1.Injectable)(),
229
+ __param(1, (0, common_1.Inject)(permission_module_definition_1.MODULE_OPTIONS_TOKEN)),
230
+ __metadata("design:paramtypes", [core_1.Reflector, Object, core_1.ModuleRef])
231
+ ], PermissionGuard);
232
+ //# sourceMappingURL=permission.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.guard.js","sourceRoot":"","sources":["../src/permission.guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const request_context_1 = require("@nest-boot/request-context");
4
+ const common_1 = require("@nestjs/common");
5
+ const permission_action_enum_1 = require("./enums/permission-action.enum");
6
+ const permission_constants_1 = require("./permission.constants");
7
+ const permission_guard_1 = require("./permission.guard");
8
+ const get_permission_ability_util_1 = require("./utils/get-permission-ability.util");
9
+ class Subject {
10
+ }
11
+ class Controller {
12
+ }
13
+ describe("PermissionGuard", () => {
14
+ afterEach(() => {
15
+ Reflect.deleteMetadata(permission_constants_1.ROUTE_ARGS_METADATA, Controller, "handler");
16
+ });
17
+ it("allows requests without permission metadata", async () => {
18
+ const { guard, reflector, buildAbility } = createGuard();
19
+ reflector.getAllAndOverride.mockReturnValue(undefined);
20
+ await expect(guard.canActivate(createContext())).resolves.toBe(true);
21
+ expect(buildAbility).not.toHaveBeenCalled();
22
+ });
23
+ it("throws when permission metadata exists but no ability is available", async () => {
24
+ const { guard, reflector, buildAbility } = createGuard();
25
+ reflector.getAllAndOverride.mockReturnValue({
26
+ action: permission_action_enum_1.PermissionAction.READ,
27
+ subject: Subject,
28
+ });
29
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
30
+ await expect(guard.canActivate(createContext())).rejects.toBeInstanceOf(common_1.ForbiddenException);
31
+ await expect(guard.canActivate(createContext())).rejects.toBeInstanceOf(common_1.ForbiddenException);
32
+ });
33
+ expect(buildAbility).toHaveBeenCalledTimes(1);
34
+ });
35
+ it("builds, caches, and checks ability against configured permission metadata", async () => {
36
+ const canMock = jest.fn(() => true);
37
+ const ability = {
38
+ can: canMock,
39
+ };
40
+ const { guard, reflector, buildAbility, req, res } = createGuard(ability);
41
+ reflector.getAllAndOverride.mockReturnValue({
42
+ action: permission_action_enum_1.PermissionAction.UPDATE,
43
+ subject: Subject,
44
+ });
45
+ const context = createContext(req, res);
46
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
47
+ await expect(guard.canActivate(context)).resolves.toBe(true);
48
+ await expect(request_context_1.RequestContext.get(permission_constants_1.PERMISSION_ABILITY_PROMISE)).resolves.toBe(ability);
49
+ expect(request_context_1.RequestContext.get(permission_constants_1.PERMISSION_ABILITY)).toBe(ability);
50
+ expect((0, get_permission_ability_util_1.getPermissionAbility)()).toBe(ability);
51
+ });
52
+ expect(buildAbility).toHaveBeenCalledWith(context);
53
+ expect(canMock).toHaveBeenCalledWith(permission_action_enum_1.PermissionAction.UPDATE, Subject);
54
+ });
55
+ it("passes GraphQL execution context to buildAbility", async () => {
56
+ const canMock = jest.fn(() => true);
57
+ const ability = {
58
+ can: canMock,
59
+ };
60
+ const { guard, reflector, buildAbility, req, res } = createGuard(ability);
61
+ const gqlContext = { req, res };
62
+ reflector.getAllAndOverride.mockReturnValue({
63
+ action: permission_action_enum_1.PermissionAction.UPDATE,
64
+ subject: Subject,
65
+ });
66
+ const context = createContext(undefined, undefined, [undefined, {}, gqlContext, {}], "graphql");
67
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "graphql" }), async () => {
68
+ await expect(guard.canActivate(context)).resolves.toBe(true);
69
+ });
70
+ expect(buildAbility).toHaveBeenCalledWith(context);
71
+ });
72
+ it("uses cached ability before building a new one", async () => {
73
+ const canMock = jest.fn(() => true);
74
+ const ability = {
75
+ can: canMock,
76
+ };
77
+ const { guard, reflector, buildAbility } = createGuard();
78
+ reflector.getAllAndOverride.mockReturnValue({
79
+ action: permission_action_enum_1.PermissionAction.UPDATE,
80
+ subject: Subject,
81
+ });
82
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), () => {
83
+ request_context_1.RequestContext.set(permission_constants_1.PERMISSION_ABILITY, ability);
84
+ return expect(guard.canActivate(createContext())).resolves.toBe(true);
85
+ });
86
+ expect(buildAbility).not.toHaveBeenCalled();
87
+ expect(canMock).toHaveBeenCalledWith(permission_action_enum_1.PermissionAction.UPDATE, Subject);
88
+ });
89
+ it("checks ability against subject resolved from self and decorated method args", async () => {
90
+ const subjectInstance = new Subject();
91
+ const input = { id: 123 };
92
+ const handlerThis = {
93
+ workspaceMemberService: {
94
+ findOne: jest.fn((_id) => Promise.resolve(subjectInstance)),
95
+ },
96
+ };
97
+ const subjectFactory = jest.fn((self, params) => self.workspaceMemberService.findOne(params.input.id));
98
+ const canMock = jest.fn(() => true);
99
+ const ability = {
100
+ can: canMock,
101
+ };
102
+ const { guard, reflector, moduleRef } = createGuard(ability, handlerThis);
103
+ setRouteArgsMetadata({
104
+ "3:0": {
105
+ index: 0,
106
+ },
107
+ });
108
+ reflector.getAllAndOverride.mockReturnValue({
109
+ action: permission_action_enum_1.PermissionAction.UPDATE,
110
+ subject: subjectFactory,
111
+ });
112
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
113
+ await expect(guard.canActivate(createContext({ headers: {}, body: { input } }, {}, []))).resolves.toBe(true);
114
+ });
115
+ expect(moduleRef.resolve).toHaveBeenCalledWith(Controller, expect.any(Object), { strict: false });
116
+ expect(subjectFactory.mock.contexts[0]).toBeUndefined();
117
+ expect(subjectFactory).toHaveBeenCalledWith(handlerThis, { input });
118
+ expect(handlerThis.workspaceMemberService.findOne).toHaveBeenCalledWith(123);
119
+ expect(canMock).toHaveBeenCalledWith(permission_action_enum_1.PermissionAction.UPDATE, subjectInstance);
120
+ });
121
+ it("passes GraphQL resolver arguments in decorated parameter order", async () => {
122
+ const input = { title: "New title" };
123
+ const subjectInstance = new Subject();
124
+ const handlerThis = {
125
+ postService: {
126
+ findOneOrFail: jest.fn((_id, _input) => subjectInstance),
127
+ },
128
+ };
129
+ const subjectFactory = jest.fn((self, id, params) => self.postService.findOneOrFail(id, params));
130
+ const canMock = jest.fn(() => true);
131
+ const ability = {
132
+ can: canMock,
133
+ };
134
+ const { guard, reflector, req, res } = createGuard(ability, handlerThis);
135
+ setRouteArgsMetadata({
136
+ "3:0": {
137
+ index: 0,
138
+ data: "id",
139
+ },
140
+ "3:1": {
141
+ index: 1,
142
+ data: "input",
143
+ },
144
+ });
145
+ reflector.getAllAndOverride.mockReturnValue({
146
+ action: permission_action_enum_1.PermissionAction.UPDATE,
147
+ subject: subjectFactory,
148
+ });
149
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "graphql" }), async () => {
150
+ await expect(guard.canActivate(createContext(undefined, undefined, [undefined, { input, id: "post-1" }, { req, res }, {}], "graphql"))).resolves.toBe(true);
151
+ });
152
+ expect(subjectFactory).toHaveBeenCalledWith(handlerThis, "post-1", input);
153
+ expect(handlerThis.postService.findOneOrFail).toHaveBeenCalledWith("post-1", input);
154
+ });
155
+ it("passes HTTP controller arguments in decorated parameter order", async () => {
156
+ const input = { title: "New title" };
157
+ const subjectInstance = new Subject();
158
+ const handlerThis = {
159
+ postService: {
160
+ findOneOrFail: jest.fn((_id, _input) => subjectInstance),
161
+ },
162
+ };
163
+ const subjectFactory = jest.fn((self, id, params) => self.postService.findOneOrFail(id, params));
164
+ const canMock = jest.fn(() => true);
165
+ const ability = {
166
+ can: canMock,
167
+ };
168
+ const { guard, reflector } = createGuard(ability, handlerThis);
169
+ setRouteArgsMetadata({
170
+ "5:0": {
171
+ index: 0,
172
+ data: "id",
173
+ },
174
+ "3:1": {
175
+ index: 1,
176
+ data: "input",
177
+ },
178
+ });
179
+ reflector.getAllAndOverride.mockReturnValue({
180
+ action: permission_action_enum_1.PermissionAction.UPDATE,
181
+ subject: subjectFactory,
182
+ });
183
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
184
+ await expect(guard.canActivate(createContext({
185
+ headers: {},
186
+ params: { id: "post-1" },
187
+ body: { input },
188
+ }, {}, []))).resolves.toBe(true);
189
+ });
190
+ expect(subjectFactory).toHaveBeenCalledWith(handlerThis, "post-1", input);
191
+ expect(handlerThis.postService.findOneOrFail).toHaveBeenCalledWith("post-1", input);
192
+ });
193
+ it("passes custom HTTP controller arguments to subject factories", async () => {
194
+ const workspace = { id: "workspace-1" };
195
+ const subjectInstance = new Subject();
196
+ const customFactory = jest.fn((_data, context) => context.switchToHttp().getRequest().headers["x-workspace-id"] === workspace.id
197
+ ? workspace
198
+ : null);
199
+ const handlerThis = {
200
+ workspaceService: {
201
+ findSubject: jest.fn((_customWorkspace, _id) => subjectInstance),
202
+ },
203
+ };
204
+ const subjectFactory = jest.fn((self, currentWorkspace, id) => self.workspaceService.findSubject(currentWorkspace, id));
205
+ const canMock = jest.fn(() => true);
206
+ const ability = {
207
+ can: canMock,
208
+ };
209
+ const { guard, reflector } = createGuard(ability, handlerThis);
210
+ setRouteArgsMetadata({
211
+ [`workspace${permission_constants_1.CUSTOM_ROUTE_ARGS_METADATA}:0`]: {
212
+ index: 0,
213
+ data: "workspace",
214
+ factory: customFactory,
215
+ },
216
+ "5:1": {
217
+ index: 1,
218
+ data: "id",
219
+ },
220
+ });
221
+ reflector.getAllAndOverride.mockReturnValue({
222
+ action: permission_action_enum_1.PermissionAction.UPDATE,
223
+ subject: subjectFactory,
224
+ });
225
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
226
+ await expect(guard.canActivate(createContext({
227
+ headers: { "x-workspace-id": workspace.id },
228
+ params: { id: "post-1" },
229
+ }, {}, []))).resolves.toBe(true);
230
+ });
231
+ expect(customFactory).toHaveBeenCalledWith("workspace", expect.any(Object));
232
+ expect(subjectFactory).toHaveBeenCalledWith(handlerThis, workspace, "post-1");
233
+ expect(handlerThis.workspaceService.findSubject).toHaveBeenCalledWith(workspace, "post-1");
234
+ expect(canMock).toHaveBeenCalledWith(permission_action_enum_1.PermissionAction.UPDATE, subjectInstance);
235
+ });
236
+ it("awaits async custom controller arguments before invoking subject factories", async () => {
237
+ const workspace = { id: "workspace-1" };
238
+ const subjectInstance = new Subject();
239
+ const customFactory = jest.fn(() => Promise.resolve(workspace));
240
+ const handlerThis = {
241
+ workspaceService: {
242
+ findSubject: jest.fn((_customWorkspace, _id) => subjectInstance),
243
+ },
244
+ };
245
+ const subjectFactory = jest.fn((self, currentWorkspace, id) => self.workspaceService.findSubject(currentWorkspace, id));
246
+ const canMock = jest.fn(() => true);
247
+ const ability = {
248
+ can: canMock,
249
+ };
250
+ const { guard, reflector } = createGuard(ability, handlerThis);
251
+ setRouteArgsMetadata({
252
+ [`workspace${permission_constants_1.CUSTOM_ROUTE_ARGS_METADATA}:0`]: {
253
+ index: 0,
254
+ data: "workspace",
255
+ factory: customFactory,
256
+ },
257
+ "5:1": {
258
+ index: 1,
259
+ data: "id",
260
+ },
261
+ });
262
+ reflector.getAllAndOverride.mockReturnValue({
263
+ action: permission_action_enum_1.PermissionAction.UPDATE,
264
+ subject: subjectFactory,
265
+ });
266
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
267
+ await expect(guard.canActivate(createContext({
268
+ headers: {},
269
+ params: { id: "post-1" },
270
+ }, {}, []))).resolves.toBe(true);
271
+ });
272
+ expect(subjectFactory).toHaveBeenCalledWith(handlerThis, workspace, "post-1");
273
+ expect(handlerThis.workspaceService.findSubject).toHaveBeenCalledWith(workspace, "post-1");
274
+ });
275
+ it("shares a pending ability build across concurrent checks", async () => {
276
+ const canMock = jest.fn(() => true);
277
+ const ability = {
278
+ can: canMock,
279
+ };
280
+ const { guard, reflector, buildAbility } = createGuard();
281
+ let resolveAbility;
282
+ const abilityPromise = new Promise((resolve) => {
283
+ resolveAbility = resolve;
284
+ });
285
+ buildAbility.mockImplementation(() => abilityPromise);
286
+ reflector.getAllAndOverride.mockReturnValue({
287
+ action: permission_action_enum_1.PermissionAction.UPDATE,
288
+ subject: Subject,
289
+ });
290
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "graphql" }), async () => {
291
+ const first = guard.canActivate(createContext());
292
+ const second = guard.canActivate(createContext());
293
+ await Promise.resolve();
294
+ expect(buildAbility).toHaveBeenCalledTimes(1);
295
+ resolveAbility(ability);
296
+ await expect(Promise.all([first, second])).resolves.toEqual([
297
+ true,
298
+ true,
299
+ ]);
300
+ });
301
+ expect(canMock).toHaveBeenCalledTimes(2);
302
+ });
303
+ it("returns false when ability denies the permission", async () => {
304
+ const canMock = jest.fn(() => false);
305
+ const { guard, reflector } = createGuard({
306
+ can: canMock,
307
+ });
308
+ reflector.getAllAndOverride.mockReturnValue({
309
+ action: permission_action_enum_1.PermissionAction.DELETE,
310
+ subject: Subject,
311
+ });
312
+ await request_context_1.RequestContext.run(new request_context_1.RequestContext({ type: "http" }), async () => {
313
+ await expect(guard.canActivate(createContext())).resolves.toBe(false);
314
+ });
315
+ });
316
+ });
317
+ function createGuard(ability = null, handlerThis = {}) {
318
+ const reflector = {
319
+ getAllAndOverride: jest.fn(),
320
+ };
321
+ const buildAbility = jest.fn((_ctx) => ability);
322
+ const moduleRef = {
323
+ resolve: jest.fn(() => Promise.resolve(handlerThis)),
324
+ };
325
+ const req = {
326
+ headers: {},
327
+ };
328
+ const res = {};
329
+ return {
330
+ guard: new permission_guard_1.PermissionGuard(reflector, { buildAbility }, moduleRef),
331
+ reflector,
332
+ buildAbility,
333
+ moduleRef,
334
+ req,
335
+ res,
336
+ };
337
+ }
338
+ function createContext(req, res, args = [], type = "http") {
339
+ const resolvedReq = arguments.length >= 1 ? req : { headers: {} };
340
+ const resolvedRes = arguments.length >= 2 ? res : {};
341
+ return {
342
+ getType: jest.fn(() => type),
343
+ switchToHttp: () => ({
344
+ getRequest: () => resolvedReq,
345
+ getResponse: () => resolvedRes,
346
+ getNext: () => args[2],
347
+ }),
348
+ getArgs: jest.fn(() => args),
349
+ getHandler: jest.fn(() => function handler() {
350
+ return undefined;
351
+ }),
352
+ getClass: jest.fn(() => Controller),
353
+ };
354
+ }
355
+ function setRouteArgsMetadata(metadata) {
356
+ Reflect.defineMetadata(permission_constants_1.ROUTE_ARGS_METADATA, metadata, Controller, "handler");
357
+ }
358
+ //# sourceMappingURL=permission.guard.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.guard.spec.js","sourceRoot":"","sources":["../src/permission.guard.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PermissionModuleOptions } from "./interfaces/permission-module-options.interface";
2
+ /** Configurable module base class for `PermissionModule`. */
3
+ export declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<PermissionModuleOptions, "forRoot", "create", {}>;
4
+ /** Injection token for permission module options. */
5
+ export declare const MODULE_OPTIONS_TOKEN: string | symbol;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MODULE_OPTIONS_TOKEN = exports.ConfigurableModuleClass = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const moduleDefinition = new common_1.ConfigurableModuleBuilder()
6
+ .setClassMethodName("forRoot")
7
+ .build();
8
+ /** Configurable module base class for `PermissionModule`. */
9
+ exports.ConfigurableModuleClass = moduleDefinition.ConfigurableModuleClass;
10
+ /** Injection token for permission module options. */
11
+ exports.MODULE_OPTIONS_TOKEN = moduleDefinition.MODULE_OPTIONS_TOKEN;
12
+ //# sourceMappingURL=permission.module-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.module-definition.js","sourceRoot":"","sources":["../src/permission.module-definition.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAI3D,MAAM,gBAAgB,GACpB,IAAI,kCAAyB,EAA2B;KACrD,kBAAkB,CAAC,SAAS,CAAC;KAC7B,KAAK,EAAE,CAAC;AAEb,6DAA6D;AAChD,QAAA,uBAAuB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC;AAEhF,qDAAqD;AACxC,QAAA,oBAAoB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC"}