@klerick/acl-json-api-nestjs 0.1.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 (135) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +3556 -0
  3. package/package.json +41 -0
  4. package/src/index.d.ts +8 -0
  5. package/src/index.js +15 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/constants/index.d.ts +14 -0
  8. package/src/lib/constants/index.js +18 -0
  9. package/src/lib/constants/index.js.map +1 -0
  10. package/src/lib/decorators/acl-controller.decorator.d.ts +4 -0
  11. package/src/lib/decorators/acl-controller.decorator.js +19 -0
  12. package/src/lib/decorators/acl-controller.decorator.js.map +1 -0
  13. package/src/lib/decorators/index.d.ts +1 -0
  14. package/src/lib/decorators/index.js +6 -0
  15. package/src/lib/decorators/index.js.map +1 -0
  16. package/src/lib/factories/ability-proxy.factory.d.ts +17 -0
  17. package/src/lib/factories/ability-proxy.factory.js +100 -0
  18. package/src/lib/factories/ability-proxy.factory.js.map +1 -0
  19. package/src/lib/factories/ability.factory.d.ts +49 -0
  20. package/src/lib/factories/ability.factory.js +235 -0
  21. package/src/lib/factories/ability.factory.js.map +1 -0
  22. package/src/lib/factories/index.d.ts +2 -0
  23. package/src/lib/factories/index.js +6 -0
  24. package/src/lib/factories/index.js.map +1 -0
  25. package/src/lib/guards/acl.guard.d.ts +21 -0
  26. package/src/lib/guards/acl.guard.js +68 -0
  27. package/src/lib/guards/acl.guard.js.map +1 -0
  28. package/src/lib/guards/index.d.ts +1 -0
  29. package/src/lib/guards/index.js +5 -0
  30. package/src/lib/guards/index.js.map +1 -0
  31. package/src/lib/nestjs-acl-permissions.module.d.ts +9 -0
  32. package/src/lib/nestjs-acl-permissions.module.js +56 -0
  33. package/src/lib/nestjs-acl-permissions.module.js.map +1 -0
  34. package/src/lib/services/acl-authorization.service.d.ts +10 -0
  35. package/src/lib/services/acl-authorization.service.js +100 -0
  36. package/src/lib/services/acl-authorization.service.js.map +1 -0
  37. package/src/lib/services/index.d.ts +2 -0
  38. package/src/lib/services/index.js +6 -0
  39. package/src/lib/services/index.js.map +1 -0
  40. package/src/lib/services/rule-materializer.service.d.ts +73 -0
  41. package/src/lib/services/rule-materializer.service.js +251 -0
  42. package/src/lib/services/rule-materializer.service.js.map +1 -0
  43. package/src/lib/types/acl-context.types.d.ts +14 -0
  44. package/src/lib/types/acl-context.types.js +3 -0
  45. package/src/lib/types/acl-context.types.js.map +1 -0
  46. package/src/lib/types/acl-options.types.d.ts +97 -0
  47. package/src/lib/types/acl-options.types.js +3 -0
  48. package/src/lib/types/acl-options.types.js.map +1 -0
  49. package/src/lib/types/acl-rules.types.d.ts +201 -0
  50. package/src/lib/types/acl-rules.types.js +27 -0
  51. package/src/lib/types/acl-rules.types.js.map +1 -0
  52. package/src/lib/types/decorator-options.types.d.ts +64 -0
  53. package/src/lib/types/decorator-options.types.js +3 -0
  54. package/src/lib/types/decorator-options.types.js.map +1 -0
  55. package/src/lib/types/index.d.ts +4 -0
  56. package/src/lib/types/index.js +8 -0
  57. package/src/lib/types/index.js.map +1 -0
  58. package/src/lib/utils/index.d.ts +10 -0
  59. package/src/lib/utils/index.js +53 -0
  60. package/src/lib/utils/index.js.map +1 -0
  61. package/src/lib/utils/orm-proxy/extract-field-paths.d.ts +73 -0
  62. package/src/lib/utils/orm-proxy/extract-field-paths.js +155 -0
  63. package/src/lib/utils/orm-proxy/extract-field-paths.js.map +1 -0
  64. package/src/lib/utils/orm-proxy/handle-acl-query-error.d.ts +19 -0
  65. package/src/lib/utils/orm-proxy/handle-acl-query-error.js +53 -0
  66. package/src/lib/utils/orm-proxy/handle-acl-query-error.js.map +1 -0
  67. package/src/lib/utils/orm-proxy/index.d.ts +9 -0
  68. package/src/lib/utils/orm-proxy/index.js +24 -0
  69. package/src/lib/utils/orm-proxy/index.js.map +1 -0
  70. package/src/lib/utils/orm-proxy/merge-query-with-acl-data.d.ts +27 -0
  71. package/src/lib/utils/orm-proxy/merge-query-with-acl-data.js +78 -0
  72. package/src/lib/utils/orm-proxy/merge-query-with-acl-data.js.map +1 -0
  73. package/src/lib/utils/orm-proxy/prepare-acl-query.d.ts +11 -0
  74. package/src/lib/utils/orm-proxy/prepare-acl-query.js +35 -0
  75. package/src/lib/utils/orm-proxy/prepare-acl-query.js.map +1 -0
  76. package/src/lib/utils/orm-proxy/process-item-field-restrictions.d.ts +24 -0
  77. package/src/lib/utils/orm-proxy/process-item-field-restrictions.js +42 -0
  78. package/src/lib/utils/orm-proxy/process-item-field-restrictions.js.map +1 -0
  79. package/src/lib/utils/orm-proxy/remove-acl-added-fields.d.ts +31 -0
  80. package/src/lib/utils/orm-proxy/remove-acl-added-fields.js +104 -0
  81. package/src/lib/utils/orm-proxy/remove-acl-added-fields.js.map +1 -0
  82. package/src/lib/utils/orm-proxy/unset-deep.d.ts +13 -0
  83. package/src/lib/utils/orm-proxy/unset-deep.js +41 -0
  84. package/src/lib/utils/orm-proxy/unset-deep.js.map +1 -0
  85. package/src/lib/utils/orm-proxy/validate-no-current-in-rules.d.ts +19 -0
  86. package/src/lib/utils/orm-proxy/validate-no-current-in-rules.js +33 -0
  87. package/src/lib/utils/orm-proxy/validate-no-current-in-rules.js.map +1 -0
  88. package/src/lib/utils/orm-proxy/validate-rules-for-orm.d.ts +16 -0
  89. package/src/lib/utils/orm-proxy/validate-rules-for-orm.js +35 -0
  90. package/src/lib/utils/orm-proxy/validate-rules-for-orm.js.map +1 -0
  91. package/src/lib/wrappers/index.d.ts +9 -0
  92. package/src/lib/wrappers/index.js +32 -0
  93. package/src/lib/wrappers/index.js.map +1 -0
  94. package/src/lib/wrappers/logger-init.d.ts +2 -0
  95. package/src/lib/wrappers/logger-init.js +9 -0
  96. package/src/lib/wrappers/logger-init.js.map +1 -0
  97. package/src/lib/wrappers/wrapper-json-method-controller/get-proxy-orm.d.ts +4 -0
  98. package/src/lib/wrappers/wrapper-json-method-controller/get-proxy-orm.js +47 -0
  99. package/src/lib/wrappers/wrapper-json-method-controller/get-proxy-orm.js.map +1 -0
  100. package/src/lib/wrappers/wrapper-json-method-controller/index.d.ts +3 -0
  101. package/src/lib/wrappers/wrapper-json-method-controller/index.js +21 -0
  102. package/src/lib/wrappers/wrapper-json-method-controller/index.js.map +1 -0
  103. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/delete-one-proxy.d.ts +3 -0
  104. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/delete-one-proxy.js +51 -0
  105. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/delete-one-proxy.js.map +1 -0
  106. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/delete-relationship-proxy.d.ts +4 -0
  107. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/delete-relationship-proxy.js +59 -0
  108. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/delete-relationship-proxy.js.map +1 -0
  109. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-all-proxy.d.ts +13 -0
  110. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-all-proxy.js +67 -0
  111. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-all-proxy.js.map +1 -0
  112. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-one-proxy.d.ts +12 -0
  113. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-one-proxy.js +50 -0
  114. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-one-proxy.js.map +1 -0
  115. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-relationship-proxy.d.ts +4 -0
  116. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-relationship-proxy.js +50 -0
  117. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-relationship-proxy.js.map +1 -0
  118. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/index.d.ts +9 -0
  119. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/index.js +13 -0
  120. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/index.js.map +1 -0
  121. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-one-proxy.d.ts +3 -0
  122. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-one-proxy.js +132 -0
  123. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-one-proxy.js.map +1 -0
  124. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-relationship-proxy.d.ts +4 -0
  125. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-relationship-proxy.js +68 -0
  126. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-relationship-proxy.js.map +1 -0
  127. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-one-proxy.d.ts +3 -0
  128. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-one-proxy.js +73 -0
  129. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-one-proxy.js.map +1 -0
  130. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-relationship-proxy.d.ts +4 -0
  131. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-relationship-proxy.js +66 -0
  132. package/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-relationship-proxy.js.map +1 -0
  133. package/src/lib/wrappers/wrapper-json-method-controller/on-module-init.d.ts +2 -0
  134. package/src/lib/wrappers/wrapper-json-method-controller/on-module-init.js +16 -0
  135. package/src/lib/wrappers/wrapper-json-method-controller/on-module-init.js.map +1 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAllProxy = getAllProxy;
4
+ const json_api_nestjs_1 = require("@klerick/json-api-nestjs");
5
+ const factories_1 = require("../../../factories");
6
+ const utils_1 = require("../../../utils");
7
+ function getAllProxy(moduleRef) {
8
+ return async function getAllBind(query) {
9
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
10
+ const aclPrepared = (0, utils_1.prepareAclQuery)(extendAbility, query);
11
+ if (!aclPrepared) {
12
+ return this.getAll(query);
13
+ }
14
+ (0, utils_1.validateNoCurrentInRules)(extendAbility, 'getAllProxy');
15
+ const { transformToJsonApi, aclQueryData, mergedQuery } = aclPrepared;
16
+ // Fetch entity with ACL conditions - handle errors from invalid ACL rules
17
+ let result;
18
+ try {
19
+ result = await this.getAll(mergedQuery, transformToJsonApi, aclQueryData?.rulesForQuery);
20
+ }
21
+ catch (error) {
22
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'getAllProxy');
23
+ }
24
+ // If already transformed by ORM, return as is
25
+ if (transformToJsonApi) {
26
+ return result;
27
+ }
28
+ // Manual transformation with field filtering
29
+ const { totalItems, items } = result;
30
+ const { page } = query;
31
+ // Build meta
32
+ const meta = {
33
+ totalItems,
34
+ pageNumber: page.number,
35
+ pageSize: page.size,
36
+ };
37
+ // If empty, return immediately
38
+ if (totalItems === 0 || items.length === 0) {
39
+ return { meta, data: [] };
40
+ }
41
+ const fieldsForCheck = (0, utils_1.extractFieldsForCheck)(moduleRef, items[0], query, aclQueryData);
42
+ const { entityParamMap } = (0, utils_1.getCurrentEntityAndParamMap)(moduleRef);
43
+ // Field filtering logic
44
+ const fieldRestrictions = [];
45
+ for (const item of items) {
46
+ const restrictedFields = (0, utils_1.processItemFieldRestrictions)(item, fieldsForCheck, extendAbility, query, aclQueryData);
47
+ if (restrictedFields.length > 0) {
48
+ fieldRestrictions.push({
49
+ [entityParamMap.primaryColumnName]: Reflect.get(item, entityParamMap.primaryColumnName),
50
+ fields: restrictedFields,
51
+ });
52
+ }
53
+ }
54
+ // Transform data using JsonApiTransformerService
55
+ const jsonApiTransformerService = moduleRef.get(json_api_nestjs_1.JsonApiTransformerService);
56
+ const { data, included } = jsonApiTransformerService.transformData(items, query);
57
+ return {
58
+ meta: {
59
+ ...meta,
60
+ ...(fieldRestrictions.length > 0 && { fieldRestrictions }),
61
+ },
62
+ data,
63
+ ...(included ? { included } : {}),
64
+ };
65
+ };
66
+ }
67
+ //# sourceMappingURL=get-all-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-all-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-all-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ModuleRef } from '@nestjs/core';
2
+ import { OrmService } from '@klerick/json-api-nestjs';
3
+ export declare function getOneProxy<E extends object, IdKey extends string>(moduleRef: ModuleRef): (this: OrmService<E, IdKey>, id: Parameters<OrmService<E, IdKey>["getOne"]>[0], query: Parameters<OrmService<E, IdKey>["getOne"]>[1]) => Promise<E | import("dist/libs/json-api/json-api-nestjs-shared/cjs/src").ResourceObject<E, "object", null, IdKey> | {
4
+ included?: import("dist/libs/json-api/json-api-nestjs-shared/cjs/src").Include<E, IdKey>[] | undefined;
5
+ meta: {
6
+ fieldRestrictions?: {
7
+ id: IdKey;
8
+ fields: string[];
9
+ }[] | undefined;
10
+ };
11
+ data: import("dist/libs/json-api/json-api-nestjs-shared/cjs/src").ResourceData<E, IdKey>;
12
+ }>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOneProxy = getOneProxy;
4
+ const json_api_nestjs_1 = require("@klerick/json-api-nestjs");
5
+ const factories_1 = require("../../../factories");
6
+ const utils_1 = require("../../../utils");
7
+ function getOneProxy(moduleRef) {
8
+ return async function getOneBind(id, query) {
9
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
10
+ const aclPrepared = (0, utils_1.prepareAclQuery)(extendAbility, query);
11
+ if (!aclPrepared) {
12
+ return this.getOne(id, query);
13
+ }
14
+ (0, utils_1.validateNoCurrentInRules)(extendAbility, 'getOneProxy');
15
+ const { transformToJsonApi, aclQueryData, mergedQuery } = aclPrepared;
16
+ // Fetch entity with ACL conditions - handle errors from invalid ACL rules
17
+ let result;
18
+ try {
19
+ result = await this.getOne(id, mergedQuery, transformToJsonApi, aclQueryData?.rulesForQuery);
20
+ }
21
+ catch (error) {
22
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'getOneProxy');
23
+ }
24
+ // If already transformed by ORM, return as is
25
+ if (transformToJsonApi) {
26
+ return result;
27
+ }
28
+ const resultItem = result;
29
+ const fieldsForCheck = (0, utils_1.extractFieldsForCheck)(moduleRef, resultItem, query, aclQueryData);
30
+ const { entityParamMap } = (0, utils_1.getCurrentEntityAndParamMap)(moduleRef);
31
+ const fieldRestrictions = [];
32
+ const restrictedFields = (0, utils_1.processItemFieldRestrictions)(resultItem, fieldsForCheck, extendAbility, query, aclQueryData);
33
+ if (restrictedFields.length > 0) {
34
+ fieldRestrictions.push({
35
+ [entityParamMap.primaryColumnName]: Reflect.get(resultItem, entityParamMap.primaryColumnName),
36
+ fields: restrictedFields,
37
+ });
38
+ }
39
+ const jsonApiTransformerService = moduleRef.get(json_api_nestjs_1.JsonApiTransformerService);
40
+ const { data, included } = jsonApiTransformerService.transformData(resultItem, query);
41
+ return {
42
+ meta: {
43
+ ...(fieldRestrictions.length > 0 && { fieldRestrictions }),
44
+ },
45
+ data,
46
+ ...(included ? { included } : {}),
47
+ };
48
+ };
49
+ }
50
+ //# sourceMappingURL=get-one-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-one-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-one-proxy.ts"],"names":[],"mappings":";;AAgBA,kCA0FC;AAzGD,8DAIkC;AAClC,kDAAmD;AACnD,0CAOwB;AAExB,SAAgB,WAAW,CACzB,SAAoB;IAEpB,OAAO,KAAK,UAAU,UAAU,CAE9B,EAAiD,EACjD,KAAoD;QAEpD,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,yBAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,IAAA,uBAAe,EACjC,aAAa,EACb,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,IAAA,gCAAwB,EAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAEvD,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QAEtE,0EAA0E;QAC1E,IAAI,MAA2D,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CACxB,EAAE,EACF,WAAW,EACX,kBAAkB,EAClB,YAAY,EAAE,aAAa,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,2BAAmB,EAAC,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACzE,CAAC;QAED,8CAA8C;QAC9C,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,MAAW,CAAC;QAE/B,MAAM,cAAc,GAAG,IAAA,6BAAqB,EAC1C,SAAS,EACT,UAAU,EACV,KAAK,EACL,YAAY,CACb,CAAC;QAEF,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,mCAA2B,EAAC,SAAS,CAAC,CAAC;QAElE,MAAM,iBAAiB,GAA2C,EAAE,CAAC;QAErE,MAAM,gBAAgB,GAAG,IAAA,oCAA4B,EACnD,UAAU,EACV,cAAc,EACd,aAAa,EACb,KAAK,EACL,YAAY,CACb,CAAC;QAEF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,iBAAiB,CAAC,IAAI,CAAC;gBACrB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,GAAG,CAC7C,UAAU,EACV,cAAc,CAAC,iBAAiB,CACxB;gBACV,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,yBAAyB,GAAG,SAAS,CAAC,GAAG,CAE7C,2CAAyB,CAAC,CAAC;QAE7B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,yBAAyB,CAAC,aAAa,CAChE,UAAU,EACV,KAAK,CACN,CAAC;QAEF,OAAO;YACL,IAAI,EAAE;gBACJ,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;aAC3D;YACD,IAAI;YACJ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClC,CAAC;IACJ,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { OrmService } from '@klerick/json-api-nestjs';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { RelationKeys } from '@klerick/json-api-nestjs-shared';
4
+ export declare function getRelationshipProxy<E extends object, IdKey extends string>(moduleRef: ModuleRef): <Rel extends RelationKeys<E, IdKey>>(this: OrmService<E, IdKey>, id: IdKey, rel: Rel) => Promise<import("@klerick/json-api-nestjs-shared").ResourceObjectRelationships<E, IdKey, Rel>>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRelationshipProxy = getRelationshipProxy;
4
+ const factories_1 = require("../../../factories");
5
+ const utils_1 = require("../../../utils");
6
+ const ability_1 = require("@casl/ability");
7
+ const common_1 = require("@nestjs/common");
8
+ function getRelationshipProxy(moduleRef) {
9
+ return async function getOneBind(id, rel) {
10
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
11
+ const aclPrepared = (0, utils_1.prepareAclQuery)(extendAbility, {
12
+ include: [rel],
13
+ fields: null,
14
+ }, false);
15
+ if (!aclPrepared) {
16
+ return this.getRelationship(id, rel);
17
+ }
18
+ (0, utils_1.validateNoCurrentInRules)(extendAbility, 'getRelationshipProxy');
19
+ const { mergedQuery } = aclPrepared;
20
+ let result;
21
+ try {
22
+ result = await this.getOne(id, {
23
+ fields: null,
24
+ include: mergedQuery.include,
25
+ }, false, undefined);
26
+ }
27
+ catch (error) {
28
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'getRelationshipProxy');
29
+ }
30
+ const resultItem = result;
31
+ extendAbility.updateWithInput(resultItem);
32
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, resultItem), rel.toString())) {
33
+ common_1.Logger.debug(`Access denied for (action: ${extendAbility.action}, subject: ${extendAbility.subject}), field ${rel.toString()}`, 'getRelationshipProxy', {
34
+ subject: resultItem,
35
+ rules: extendAbility.rules,
36
+ });
37
+ throw new common_1.ForbiddenException([
38
+ {
39
+ code: 'forbidden',
40
+ message: `not allow "${extendAbility.action}"`,
41
+ path: ['action'],
42
+ },
43
+ ], {
44
+ description: `Access denied for ${extendAbility.action} on ${extendAbility.subject}`,
45
+ });
46
+ }
47
+ return this.getRelationship(id, rel);
48
+ };
49
+ }
50
+ //# sourceMappingURL=get-relationship-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-relationship-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/get-relationship-proxy.ts"],"names":[],"mappings":";;AAYA,oDA+EC;AAxFD,kDAAmD;AACnD,0CAIwB;AACxB,2CAAwC;AACxC,2CAA4D;AAE5D,SAAgB,oBAAoB,CAClC,SAAoB;IAEpB,OAAO,KAAK,UAAU,UAAU,CAE9B,EAAS,EACT,GAAQ;QAER,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,yBAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,IAAA,uBAAe,EACjC,aAAa,EACb;YACE,OAAO,EAAE,CAAC,GAAU,CAAC;YACrB,MAAM,EAAE,IAAI;SACb,EACD,KAAK,CACN,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,IAAA,gCAAwB,EAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QAEhE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QAEpC,IAAI,MAA2D,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CACxB,EAAE,EACF;gBACE,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,WAAW,CAAC,OAAO;aAC7B,EACD,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,2BAAmB,EACvB,KAAK,EACL,aAAa,CAAC,OAAO,EACrB,sBAAsB,CACvB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAW,CAAC;QAC/B,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1C,IACE,CAAC,aAAa,CAAC,GAAG,CAChB,aAAa,CAAC,MAAM,EACpB,IAAA,iBAAO,EAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,EAC1C,GAAG,CAAC,QAAQ,EAAE,CACf,EACD,CAAC;YACD,eAAM,CAAC,KAAK,CACV,8BAA8B,aAAa,CAAC,MAAM,cAAc,aAAa,CAAC,OAAO,YAAY,GAAG,CAAC,QAAQ,EAAE,EAAE,EACjH,sBAAsB,EACtB;gBACE,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B,CACF,CAAC;YACF,MAAM,IAAI,2BAAkB,CAC1B;gBACE;oBACE,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc,aAAa,CAAC,MAAM,GAAG;oBAC9C,IAAI,EAAE,CAAC,QAAQ,CAAC;iBACjB;aACF,EACD;gBACE,WAAW,EAAE,qBAAqB,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,OAAO,EAAE;aACrF,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './get-all-proxy';
2
+ export * from './get-one-proxy';
3
+ export * from './delete-one-proxy';
4
+ export * from './patch-one-proxy';
5
+ export * from './post-one-proxy';
6
+ export * from './get-relationship-proxy';
7
+ export * from './delete-relationship-proxy';
8
+ export * from './post-relationship-proxy';
9
+ export * from './patch-relationship-proxy';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./get-all-proxy"), exports);
5
+ tslib_1.__exportStar(require("./get-one-proxy"), exports);
6
+ tslib_1.__exportStar(require("./delete-one-proxy"), exports);
7
+ tslib_1.__exportStar(require("./patch-one-proxy"), exports);
8
+ tslib_1.__exportStar(require("./post-one-proxy"), exports);
9
+ tslib_1.__exportStar(require("./get-relationship-proxy"), exports);
10
+ tslib_1.__exportStar(require("./delete-relationship-proxy"), exports);
11
+ tslib_1.__exportStar(require("./post-relationship-proxy"), exports);
12
+ tslib_1.__exportStar(require("./patch-relationship-proxy"), exports);
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/index.ts"],"names":[],"mappings":";;;AAAA,0DAA+B;AAC/B,0DAA+B;AAC/B,6DAAkC;AAClC,4DAAiC;AACjC,2DAAgC;AAChC,mEAAwC;AACxC,sEAA2C;AAC3C,oEAAyC;AACzC,qEAA0C"}
@@ -0,0 +1,3 @@
1
+ import { ModuleRef } from '@nestjs/core';
2
+ import { OrmService } from '@klerick/json-api-nestjs';
3
+ export declare function patchOneProxy<E extends object, IdKey extends string>(moduleRef: ModuleRef): (this: OrmService<E, IdKey>, id: Parameters<OrmService<E, IdKey>["patchOne"]>[0], inputData: Parameters<OrmService<E, IdKey>["patchOne"]>[1]) => Promise<import("dist/libs/json-api/json-api-nestjs-shared/cjs/src").ResourceObject<E, "object", null, IdKey>>;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.patchOneProxy = patchOneProxy;
4
+ const factories_1 = require("../../../factories");
5
+ const utils_1 = require("../../../utils");
6
+ const ability_1 = require("@casl/ability");
7
+ const common_1 = require("@nestjs/common");
8
+ function patchOneProxy(moduleRef) {
9
+ return async function patchOneBind(id, inputData) {
10
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
11
+ const aclPrepared = (0, utils_1.prepareAclQuery)(extendAbility, {
12
+ include: [],
13
+ fields: null,
14
+ });
15
+ if (!aclPrepared) {
16
+ return this.patchOne(id, inputData);
17
+ }
18
+ const { mergedQuery } = aclPrepared;
19
+ let result;
20
+ try {
21
+ result = await this.getOne(id, {
22
+ fields: null,
23
+ include: mergedQuery.include,
24
+ }, false, undefined);
25
+ }
26
+ catch (error) {
27
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'patchOneProxy');
28
+ }
29
+ const resultItem = result;
30
+ const { relationships, attributes } = inputData;
31
+ const relationshipsToChange = Object.keys(relationships || {});
32
+ let loadedRelations = {};
33
+ if (relationships) {
34
+ try {
35
+ loadedRelations = await this.loadRelations(relationships);
36
+ }
37
+ catch (error) {
38
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'patchOneProxy');
39
+ }
40
+ }
41
+ const { currentEntity: entityClass, entityParamMapService } = (0, utils_1.getCurrentEntityAndParamMap)(moduleRef);
42
+ const extractor = utils_1.ExtractFieldPaths.getInstance(entityParamMapService);
43
+ const currentEntityPropsOnly = extractor.props(resultItem, entityClass);
44
+ const mergedEntity = {
45
+ ...currentEntityPropsOnly,
46
+ ...(attributes || {}),
47
+ ...loadedRelations,
48
+ };
49
+ // Detect changed attributes by comparing old (DB) vs new (request) values
50
+ // Coverage: ~90% of real-world use cases
51
+ //
52
+ // Comparison strategy:
53
+ // - Primitives (string, number, boolean, null): strict equality (===)
54
+ // - Objects/Arrays: JSON.stringify comparison
55
+ //
56
+ // Known edge cases (acceptable tradeoffs):
57
+ // 1. JSONB fields with different key order may trigger false positives:
58
+ // { a: 1, b: 2 } !== { b: 2, a: 1 } (content identical, but detected as different)
59
+ // 2. Circular references: Not expected in JSON API requests (would fail JSON.parse)
60
+ // 3. Date objects: try to use toISOString() for comparison
61
+ //
62
+ // If you encounter issues, please create a GitHub issue with your use case.
63
+ const changedAttributes = [];
64
+ if (attributes) {
65
+ for (const attrKey of Object.keys(attributes)) {
66
+ let currentValue = currentEntityPropsOnly[attrKey];
67
+ let newValue = attributes[attrKey];
68
+ newValue =
69
+ newValue !== null && typeof newValue === 'object'
70
+ ? newValue instanceof Date ? newValue.toISOString() : JSON.stringify(newValue)
71
+ : newValue;
72
+ currentValue =
73
+ currentValue !== null && typeof currentValue === 'object'
74
+ ? currentValue instanceof Date ? currentValue.toISOString() : JSON.stringify(currentValue)
75
+ : currentValue;
76
+ if (currentValue !== newValue) {
77
+ changedAttributes.push(attrKey);
78
+ }
79
+ }
80
+ }
81
+ const changedFields = [...changedAttributes, ...relationshipsToChange];
82
+ // Entity for check contains:
83
+ // - Root level: NEW values (merged entity after applying changes)
84
+ // - __current: OLD values (entity as loaded from DB)
85
+ // This enables rules to compare old vs new values, e.g.:
86
+ // - Allow removing only self: { '__current.coAuthorIds': { $in: [@input.userId] }, 'coAuthorIds': { $nin: [@input.userId] } }
87
+ const entityForCheck = {
88
+ ...mergedEntity,
89
+ __current: resultItem,
90
+ };
91
+ extendAbility.updateWithInput(entityForCheck);
92
+ // Entity-level check
93
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, entityForCheck))) {
94
+ common_1.Logger.debug(`Access denied for (action: ${extendAbility.action}, subject: ${extendAbility.subject})`, 'patchOneProxy', {
95
+ subject: entityForCheck,
96
+ rules: extendAbility.rules,
97
+ });
98
+ throw new common_1.ForbiddenException([
99
+ {
100
+ code: 'forbidden',
101
+ message: `not allow "${extendAbility.action}"`,
102
+ path: ['action'],
103
+ },
104
+ ], {
105
+ description: `Access denied for ${extendAbility.action} on ${extendAbility.subject}`,
106
+ });
107
+ }
108
+ // Field-level checks for changed fields
109
+ for (const field of changedFields) {
110
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, entityForCheck), field)) {
111
+ common_1.Logger.debug(`Field-level access denied for field '${field}'`, 'patchOneProxy', {
112
+ field,
113
+ currentValue: entityForCheck.__current[field],
114
+ newValue: entityForCheck[field],
115
+ subject: entityForCheck,
116
+ rules: extendAbility.rules,
117
+ });
118
+ throw new common_1.ForbiddenException([
119
+ {
120
+ code: 'forbidden',
121
+ message: `not allow to modify field "${field}"`,
122
+ path: ['data', 'attributes', field],
123
+ },
124
+ ], {
125
+ description: `Field-level access denied for ${field}`,
126
+ });
127
+ }
128
+ }
129
+ return this.patchOne(id, inputData);
130
+ };
131
+ }
132
+ //# sourceMappingURL=patch-one-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-one-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-one-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { OrmService, PatchRelationshipData } from '@klerick/json-api-nestjs';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { RelationKeys } from '@klerick/json-api-nestjs-shared';
4
+ export declare function patchRelationshipProxy<E extends object, IdKey extends string>(moduleRef: ModuleRef): <Rel extends RelationKeys<E, IdKey>>(this: OrmService<E, IdKey>, id: IdKey, rel: Rel, input: PatchRelationshipData) => Promise<import("@klerick/json-api-nestjs-shared").ResourceObjectRelationships<E, IdKey, Rel>>;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.patchRelationshipProxy = patchRelationshipProxy;
4
+ const factories_1 = require("../../../factories");
5
+ const utils_1 = require("../../../utils");
6
+ const ability_1 = require("@casl/ability");
7
+ const common_1 = require("@nestjs/common");
8
+ function patchRelationshipProxy(moduleRef) {
9
+ return async function patchRelationshipBind(id, rel, input) {
10
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
11
+ const aclPrepared = (0, utils_1.prepareAclQuery)(extendAbility, {
12
+ include: [rel],
13
+ fields: null,
14
+ }, false);
15
+ if (!aclPrepared) {
16
+ return this.patchRelationship(id, rel, input);
17
+ }
18
+ const { mergedQuery } = aclPrepared;
19
+ let result;
20
+ try {
21
+ result = await this.getOne(id, {
22
+ fields: null,
23
+ include: mergedQuery.include,
24
+ }, false, undefined);
25
+ }
26
+ catch (error) {
27
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'patchRelationshipProxy');
28
+ }
29
+ const oldResult = result;
30
+ // Transform input to relationships format for loadRelations
31
+ const relationshipsData = {
32
+ [rel]: input,
33
+ };
34
+ let loadedRelations;
35
+ try {
36
+ loadedRelations = await this.loadRelations(relationshipsData);
37
+ }
38
+ catch (error) {
39
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'patchRelationshipProxy');
40
+ }
41
+ // Entity for check contains:
42
+ // - Root level: old entity + NEW relationships (replacing old ones)
43
+ // - __current: old entity with OLD relationships (as loaded from DB)
44
+ const entityToCheck = {
45
+ ...oldResult,
46
+ [rel]: loadedRelations[rel.toString()], // NEW relationships (overwrite old)
47
+ __current: oldResult, // OLD entity with OLD relationships
48
+ };
49
+ extendAbility.updateWithInput(entityToCheck);
50
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, entityToCheck), rel.toString())) {
51
+ common_1.Logger.debug(`Access denied for (action: ${extendAbility.action}, subject: ${extendAbility.subject}), field ${rel.toString()}`, 'patchRelationshipProxy', {
52
+ subject: entityToCheck,
53
+ rules: extendAbility.rules,
54
+ });
55
+ throw new common_1.ForbiddenException([
56
+ {
57
+ code: 'forbidden',
58
+ message: `not allow "${extendAbility.action}"`,
59
+ path: ['action'],
60
+ },
61
+ ], {
62
+ description: `Access denied for ${extendAbility.action} on ${extendAbility.subject}`,
63
+ });
64
+ }
65
+ return this.patchRelationship(id, rel, input);
66
+ };
67
+ }
68
+ //# sourceMappingURL=patch-relationship-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-relationship-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/patch-relationship-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ModuleRef } from '@nestjs/core';
2
+ import { OrmService } from '@klerick/json-api-nestjs';
3
+ export declare function postOneProxy<E extends object, IdKey extends string>(moduleRef: ModuleRef): (this: OrmService<E, IdKey>, inputData: Parameters<OrmService<E, IdKey>["postOne"]>[0]) => Promise<import("dist/libs/json-api/json-api-nestjs-shared/cjs/src").ResourceObject<E, "object", null, IdKey>>;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postOneProxy = postOneProxy;
4
+ const factories_1 = require("../../../factories");
5
+ const utils_1 = require("../../../utils");
6
+ const ability_1 = require("@casl/ability");
7
+ const common_1 = require("@nestjs/common");
8
+ function postOneProxy(moduleRef) {
9
+ return async function postOneBind(inputData) {
10
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
11
+ if (!extendAbility ||
12
+ extendAbility.rules.length === 0 ||
13
+ (!extendAbility.hasConditions && !extendAbility.hasFields)) {
14
+ return this.postOne(inputData);
15
+ }
16
+ (0, utils_1.validateNoCurrentInRules)(extendAbility, 'postOneProxy');
17
+ const { relationships, attributes } = inputData;
18
+ let loadedRelations = {};
19
+ if (relationships) {
20
+ try {
21
+ loadedRelations = await this.loadRelations(relationships);
22
+ }
23
+ catch (error) {
24
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'postOneProxy');
25
+ }
26
+ }
27
+ const resultEntity = {
28
+ ...(attributes || {}),
29
+ ...loadedRelations,
30
+ };
31
+ const changedAttributes = [
32
+ ...Object.keys(attributes || {}),
33
+ ...Object.keys(loadedRelations),
34
+ ];
35
+ extendAbility.updateWithInput(resultEntity);
36
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, resultEntity))) {
37
+ common_1.Logger.debug(`Access denied for (action: ${extendAbility.action}, subject: ${extendAbility.subject})`, 'postOneProxy', {
38
+ subject: resultEntity,
39
+ rules: extendAbility.rules,
40
+ });
41
+ throw new common_1.ForbiddenException([
42
+ {
43
+ code: 'forbidden',
44
+ message: `not allow "${extendAbility.action}"`,
45
+ path: ['action'],
46
+ },
47
+ ], {
48
+ description: `Access denied for ${extendAbility.action} on ${extendAbility.subject}`,
49
+ });
50
+ }
51
+ for (const field of changedAttributes) {
52
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, resultEntity), field)) {
53
+ common_1.Logger.debug(`Field-level access denied for field '${field}'`, 'postOneProxy', {
54
+ field,
55
+ value: resultEntity[field],
56
+ subject: resultEntity,
57
+ rules: extendAbility.rules,
58
+ });
59
+ throw new common_1.ForbiddenException([
60
+ {
61
+ code: 'forbidden',
62
+ message: `not allow to set field "${field}"`,
63
+ path: ['data', 'attributes', field],
64
+ },
65
+ ], {
66
+ description: `Field-level access denied for ${field}`,
67
+ });
68
+ }
69
+ }
70
+ return this.postOne(inputData);
71
+ };
72
+ }
73
+ //# sourceMappingURL=post-one-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-one-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-one-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { OrmService, PostRelationshipData } from '@klerick/json-api-nestjs';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { RelationKeys } from '@klerick/json-api-nestjs-shared';
4
+ export declare function postRelationshipProxy<E extends object, IdKey extends string>(moduleRef: ModuleRef): <Rel extends RelationKeys<E, IdKey>>(this: OrmService<E, IdKey>, id: IdKey, rel: Rel, input: PostRelationshipData) => Promise<import("@klerick/json-api-nestjs-shared").ResourceObjectRelationships<E, IdKey, Rel>>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postRelationshipProxy = postRelationshipProxy;
4
+ const factories_1 = require("../../../factories");
5
+ const utils_1 = require("../../../utils");
6
+ const ability_1 = require("@casl/ability");
7
+ const common_1 = require("@nestjs/common");
8
+ function postRelationshipProxy(moduleRef) {
9
+ return async function postRelationshipBind(id, rel, input) {
10
+ const extendAbility = moduleRef.get(factories_1.ExtendAbility, { strict: false });
11
+ const aclPrepared = (0, utils_1.prepareAclQuery)(extendAbility, {
12
+ include: [],
13
+ fields: null,
14
+ }, false);
15
+ if (!aclPrepared) {
16
+ return this.postRelationship(id, rel, input);
17
+ }
18
+ (0, utils_1.validateNoCurrentInRules)(extendAbility, 'postRelationshipProxy');
19
+ const { mergedQuery } = aclPrepared;
20
+ let result;
21
+ try {
22
+ result = await this.getOne(id, {
23
+ fields: null,
24
+ include: mergedQuery.include,
25
+ }, false, undefined);
26
+ }
27
+ catch (error) {
28
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'postRelationshipProxy');
29
+ }
30
+ const resultItem = result;
31
+ // Transform input to relationships format for loadRelations
32
+ const relationshipsData = {
33
+ [rel]: input,
34
+ };
35
+ let loadedRelations;
36
+ try {
37
+ loadedRelations = await this.loadRelations(relationshipsData);
38
+ }
39
+ catch (error) {
40
+ throw (0, utils_1.handleAclQueryError)(error, extendAbility.subject, 'postRelationshipProxy');
41
+ }
42
+ // Merge entity with relations being added
43
+ const entityToCheck = {
44
+ ...resultItem,
45
+ ...loadedRelations,
46
+ };
47
+ extendAbility.updateWithInput(entityToCheck);
48
+ if (!extendAbility.can(extendAbility.action, (0, ability_1.subject)(extendAbility.subject, entityToCheck), rel.toString())) {
49
+ common_1.Logger.debug(`Access denied for (action: ${extendAbility.action}, subject: ${extendAbility.subject}), field ${rel.toString()}`, 'postRelationshipProxy', {
50
+ subject: entityToCheck,
51
+ rules: extendAbility.rules,
52
+ });
53
+ throw new common_1.ForbiddenException([
54
+ {
55
+ code: 'forbidden',
56
+ message: `not allow "${extendAbility.action}"`,
57
+ path: ['action'],
58
+ },
59
+ ], {
60
+ description: `Access denied for ${extendAbility.action} on ${extendAbility.subject}`,
61
+ });
62
+ }
63
+ return this.postRelationship(id, rel, input);
64
+ };
65
+ }
66
+ //# sourceMappingURL=post-relationship-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-relationship-proxy.js","sourceRoot":"","sources":["../../../../../../../../../libs/acl-permissions/nestjs-acl-permissions/src/lib/wrappers/wrapper-json-method-controller/method-proxy/post-relationship-proxy.ts"],"names":[],"mappings":";;AAYA,sDAwGC;AAjHD,kDAAmD;AACnD,0CAIwB;AACxB,2CAAwC;AACxC,2CAA4D;AAE5D,SAAgB,qBAAqB,CACnC,SAAoB;IAEpB,OAAO,KAAK,UAAU,oBAAoB,CAExC,EAAS,EACT,GAAQ,EACR,KAA2B;QAE3B,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,yBAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,IAAA,uBAAe,EACjC,aAAa,EACb;YACE,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,IAAI;SACb,EACD,KAAK,CACN,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,IAAA,gCAAwB,EAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAEjE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QAEpC,IAAI,MAA2D,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CACxB,EAAE,EACF;gBACE,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,WAAW,CAAC,OAAO;aAC7B,EACD,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,2BAAmB,EACvB,KAAK,EACL,aAAa,CAAC,OAAO,EACrB,uBAAuB,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAW,CAAC;QAE/B,4DAA4D;QAC5D,MAAM,iBAAiB,GAAG;YACxB,CAAC,GAAG,CAAC,EAAE,KAAK;SAC0B,CAAC;QAEzC,IAAI,eAA6C,CAAC;QAElD,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,2BAAmB,EACvB,KAAK,EACL,aAAa,CAAC,OAAO,EACrB,uBAAuB,CACxB,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,MAAM,aAAa,GAAG;YACpB,GAAG,UAAU;YACb,GAAG,eAAe;SACd,CAAC;QAEP,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAC7C,IACE,CAAC,aAAa,CAAC,GAAG,CAChB,aAAa,CAAC,MAAM,EACpB,IAAA,iBAAO,EAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,EAC7C,GAAG,CAAC,QAAQ,EAAE,CACf,EACD,CAAC;YACD,eAAM,CAAC,KAAK,CACV,8BAA8B,aAAa,CAAC,MAAM,cAAc,aAAa,CAAC,OAAO,YAAY,GAAG,CAAC,QAAQ,EAAE,EAAE,EACjH,uBAAuB,EACvB;gBACE,OAAO,EAAE,aAAa;gBACtB,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B,CACF,CAAC;YACF,MAAM,IAAI,2BAAkB,CAC1B;gBACE;oBACE,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc,aAAa,CAAC,MAAM,GAAG;oBAC9C,IAAI,EAAE,CAAC,QAAQ,CAAC;iBACjB;aACF,EACD;gBACE,WAAW,EAAE,qBAAqB,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,OAAO,EAAE;aACrF,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}