@venizia/ignis 0.2.0-0 → 0.2.0-10

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 (177) hide show
  1. package/README.md +0 -1
  2. package/dist/base/applications/server.d.ts +1 -1
  3. package/dist/base/applications/server.d.ts.map +1 -1
  4. package/dist/base/applications/server.js +1 -1
  5. package/dist/base/applications/server.js.map +1 -1
  6. package/dist/base/controllers/grpc/abstract.d.ts +1 -1
  7. package/dist/base/controllers/grpc/abstract.d.ts.map +1 -1
  8. package/dist/base/controllers/grpc/abstract.js +12 -10
  9. package/dist/base/controllers/grpc/abstract.js.map +1 -1
  10. package/dist/base/controllers/grpc/adapter.d.ts +2 -1
  11. package/dist/base/controllers/grpc/adapter.d.ts.map +1 -1
  12. package/dist/base/controllers/grpc/adapter.js +2 -1
  13. package/dist/base/controllers/grpc/adapter.js.map +1 -1
  14. package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts +11 -1
  15. package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -1
  16. package/dist/base/middlewares/request-spy/request-spy.middleware.js +13 -5
  17. package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -1
  18. package/dist/components/api-reference/common/keys.d.ts +0 -5
  19. package/dist/components/api-reference/common/keys.d.ts.map +1 -1
  20. package/dist/components/api-reference/common/keys.js +1 -7
  21. package/dist/components/api-reference/common/keys.js.map +1 -1
  22. package/dist/components/api-reference/common/types.d.ts +1 -2
  23. package/dist/components/api-reference/common/types.d.ts.map +1 -1
  24. package/dist/components/api-reference/component.d.ts +0 -4
  25. package/dist/components/api-reference/component.d.ts.map +1 -1
  26. package/dist/components/api-reference/component.js +11 -9
  27. package/dist/components/api-reference/component.js.map +1 -1
  28. package/dist/components/api-reference/ui-factory.d.ts +5 -2
  29. package/dist/components/api-reference/ui-factory.d.ts.map +1 -1
  30. package/dist/components/api-reference/ui-factory.js +34 -4
  31. package/dist/components/api-reference/ui-factory.js.map +1 -1
  32. package/dist/components/auth/authenticate/component.d.ts +10 -1
  33. package/dist/components/auth/authenticate/component.d.ts.map +1 -1
  34. package/dist/components/auth/authenticate/component.js +79 -25
  35. package/dist/components/auth/authenticate/component.js.map +1 -1
  36. package/dist/components/auth/authenticate/controllers/index.d.ts +1 -0
  37. package/dist/components/auth/authenticate/controllers/index.d.ts.map +1 -1
  38. package/dist/components/auth/authenticate/controllers/index.js +1 -0
  39. package/dist/components/auth/authenticate/controllers/index.js.map +1 -1
  40. package/dist/components/auth/authenticate/controllers/service-certs/controller.d.ts +10 -0
  41. package/dist/components/auth/authenticate/controllers/service-certs/controller.d.ts.map +1 -0
  42. package/dist/components/auth/authenticate/controllers/service-certs/controller.js +50 -0
  43. package/dist/components/auth/authenticate/controllers/service-certs/controller.js.map +1 -0
  44. package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts +73 -0
  45. package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts.map +1 -0
  46. package/dist/components/auth/authenticate/controllers/service-certs/definitions.js +34 -0
  47. package/dist/components/auth/authenticate/controllers/service-certs/definitions.js.map +1 -0
  48. package/dist/components/auth/authenticate/controllers/service-certs/index.d.ts +3 -0
  49. package/dist/components/auth/authenticate/controllers/service-certs/index.d.ts.map +1 -0
  50. package/dist/components/auth/authenticate/controllers/service-certs/index.js +19 -0
  51. package/dist/components/auth/authenticate/controllers/service-certs/index.js.map +1 -0
  52. package/dist/components/auth/authenticate/services/bearer/abstract.service.d.ts +25 -4
  53. package/dist/components/auth/authenticate/services/bearer/abstract.service.d.ts.map +1 -1
  54. package/dist/components/auth/authenticate/services/bearer/abstract.service.js +53 -14
  55. package/dist/components/auth/authenticate/services/bearer/abstract.service.js.map +1 -1
  56. package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts +18 -1
  57. package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts.map +1 -1
  58. package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js +40 -10
  59. package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js.map +1 -1
  60. package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.d.ts +1 -1
  61. package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.d.ts.map +1 -1
  62. package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.js +4 -5
  63. package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.js.map +1 -1
  64. package/dist/components/auth/authenticate/services/bearer/jws.service.d.ts +2 -1
  65. package/dist/components/auth/authenticate/services/bearer/jws.service.d.ts.map +1 -1
  66. package/dist/components/auth/authenticate/services/bearer/jws.service.js +7 -6
  67. package/dist/components/auth/authenticate/services/bearer/jws.service.js.map +1 -1
  68. package/dist/components/auth/authenticate/services/index.d.ts +1 -0
  69. package/dist/components/auth/authenticate/services/index.d.ts.map +1 -1
  70. package/dist/components/auth/authenticate/services/index.js +1 -0
  71. package/dist/components/auth/authenticate/services/index.js.map +1 -1
  72. package/dist/components/auth/authenticate/services/service/index.d.ts +3 -0
  73. package/dist/components/auth/authenticate/services/service/index.d.ts.map +1 -0
  74. package/dist/components/auth/authenticate/services/service/index.js +19 -0
  75. package/dist/components/auth/authenticate/services/service/index.js.map +1 -0
  76. package/dist/components/auth/authenticate/services/service/signer.service.d.ts +46 -0
  77. package/dist/components/auth/authenticate/services/service/signer.service.d.ts.map +1 -0
  78. package/dist/components/auth/authenticate/services/service/signer.service.js +135 -0
  79. package/dist/components/auth/authenticate/services/service/signer.service.js.map +1 -0
  80. package/dist/components/auth/authenticate/services/service/verifier.service.d.ts +40 -0
  81. package/dist/components/auth/authenticate/services/service/verifier.service.d.ts.map +1 -0
  82. package/dist/components/auth/authenticate/services/service/verifier.service.js +165 -0
  83. package/dist/components/auth/authenticate/services/service/verifier.service.js.map +1 -0
  84. package/dist/components/auth/authenticate/strategies/index.d.ts +1 -0
  85. package/dist/components/auth/authenticate/strategies/index.d.ts.map +1 -1
  86. package/dist/components/auth/authenticate/strategies/index.js +1 -0
  87. package/dist/components/auth/authenticate/strategies/index.js.map +1 -1
  88. package/dist/components/auth/authenticate/strategies/service.strategy.d.ts +19 -0
  89. package/dist/components/auth/authenticate/strategies/service.strategy.d.ts.map +1 -0
  90. package/dist/components/auth/authenticate/strategies/service.strategy.js +73 -0
  91. package/dist/components/auth/authenticate/strategies/service.strategy.js.map +1 -0
  92. package/dist/components/auth/authorize/adapters/base-filtered.d.ts.map +1 -1
  93. package/dist/components/auth/authorize/adapters/base-filtered.js +5 -8
  94. package/dist/components/auth/authorize/adapters/base-filtered.js.map +1 -1
  95. package/dist/components/auth/authorize/adapters/connector.d.ts +10 -0
  96. package/dist/components/auth/authorize/adapters/connector.d.ts.map +1 -0
  97. package/dist/components/auth/authorize/adapters/connector.js +20 -0
  98. package/dist/components/auth/authorize/adapters/connector.js.map +1 -0
  99. package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts +52 -0
  100. package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts.map +1 -0
  101. package/dist/components/auth/authorize/adapters/custom-grant-expander.js +111 -0
  102. package/dist/components/auth/authorize/adapters/custom-grant-expander.js.map +1 -0
  103. package/dist/components/auth/authorize/adapters/index.d.ts +2 -0
  104. package/dist/components/auth/authorize/adapters/index.d.ts.map +1 -1
  105. package/dist/components/auth/authorize/adapters/index.js +2 -0
  106. package/dist/components/auth/authorize/adapters/index.js.map +1 -1
  107. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts +64 -37
  108. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +1 -1
  109. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js +69 -76
  110. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +1 -1
  111. package/dist/components/auth/authorize/component.d.ts.map +1 -1
  112. package/dist/components/auth/authorize/component.js +3 -0
  113. package/dist/components/auth/authorize/component.js.map +1 -1
  114. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts +7 -36
  115. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts.map +1 -1
  116. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js +48 -117
  117. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js.map +1 -1
  118. package/dist/components/auth/authorize/enforcers/index.d.ts +2 -1
  119. package/dist/components/auth/authorize/enforcers/index.d.ts.map +1 -1
  120. package/dist/components/auth/authorize/enforcers/index.js +2 -1
  121. package/dist/components/auth/authorize/enforcers/index.js.map +1 -1
  122. package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts +26 -0
  123. package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts.map +1 -0
  124. package/dist/components/auth/authorize/enforcers/policy-line-codec.js +57 -0
  125. package/dist/components/auth/authorize/enforcers/policy-line-codec.js.map +1 -0
  126. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.d.ts +46 -0
  127. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.d.ts.map +1 -0
  128. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.js +98 -0
  129. package/dist/components/auth/authorize/enforcers/user-policy-line-cache.js.map +1 -0
  130. package/dist/components/auth/authorize/index.d.ts +1 -0
  131. package/dist/components/auth/authorize/index.d.ts.map +1 -1
  132. package/dist/components/auth/authorize/index.js +1 -0
  133. package/dist/components/auth/authorize/index.js.map +1 -1
  134. package/dist/components/auth/authorize/role-managers/base.d.ts +34 -0
  135. package/dist/components/auth/authorize/role-managers/base.d.ts.map +1 -0
  136. package/dist/components/auth/authorize/role-managers/base.js +76 -0
  137. package/dist/components/auth/authorize/role-managers/base.js.map +1 -0
  138. package/dist/components/auth/authorize/role-managers/domain-hierarchy.d.ts +28 -0
  139. package/dist/components/auth/authorize/role-managers/domain-hierarchy.d.ts.map +1 -0
  140. package/dist/components/auth/authorize/role-managers/domain-hierarchy.js +77 -0
  141. package/dist/components/auth/authorize/role-managers/domain-hierarchy.js.map +1 -0
  142. package/dist/components/auth/authorize/role-managers/index.d.ts +5 -0
  143. package/dist/components/auth/authorize/role-managers/index.d.ts.map +1 -0
  144. package/dist/components/auth/authorize/role-managers/index.js +21 -0
  145. package/dist/components/auth/authorize/role-managers/index.js.map +1 -0
  146. package/dist/components/auth/authorize/role-managers/membership.d.ts +21 -0
  147. package/dist/components/auth/authorize/role-managers/membership.d.ts.map +1 -0
  148. package/dist/components/auth/authorize/role-managers/membership.js +69 -0
  149. package/dist/components/auth/authorize/role-managers/membership.js.map +1 -0
  150. package/dist/components/auth/authorize/{enforcers/resource-role-manager.d.ts → role-managers/resource.d.ts} +3 -9
  151. package/dist/components/auth/authorize/role-managers/resource.d.ts.map +1 -0
  152. package/dist/components/auth/authorize/{enforcers/resource-role-manager.js → role-managers/resource.js} +9 -21
  153. package/dist/components/auth/authorize/role-managers/resource.js.map +1 -0
  154. package/dist/components/auth/models/entities/policy-definition.model.d.ts +28 -14
  155. package/dist/components/auth/models/entities/policy-definition.model.d.ts.map +1 -1
  156. package/dist/components/auth/models/entities/policy-definition.model.js +18 -10
  157. package/dist/components/auth/models/entities/policy-definition.model.js.map +1 -1
  158. package/dist/components/auth/models/entities/user.model.d.ts +2 -2
  159. package/dist/components/mail/services/generator.service.d.ts +6 -3
  160. package/dist/components/mail/services/generator.service.d.ts.map +1 -1
  161. package/dist/components/mail/services/generator.service.js +13 -4
  162. package/dist/components/mail/services/generator.service.js.map +1 -1
  163. package/dist/components/request-tracker/component.d.ts +1 -1
  164. package/dist/components/request-tracker/component.d.ts.map +1 -1
  165. package/dist/components/request-tracker/component.js +1 -1
  166. package/dist/components/request-tracker/component.js.map +1 -1
  167. package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
  168. package/dist/components/static-asset/controller/factory.js +5 -1
  169. package/dist/components/static-asset/controller/factory.js.map +1 -1
  170. package/dist/components/static-asset/models/base.model.d.ts +4 -4
  171. package/dist/utilities/network.utility.d.ts +9 -0
  172. package/dist/utilities/network.utility.d.ts.map +1 -1
  173. package/dist/utilities/network.utility.js +2 -4
  174. package/dist/utilities/network.utility.js.map +1 -1
  175. package/package.json +8 -8
  176. package/dist/components/auth/authorize/enforcers/resource-role-manager.d.ts.map +0 -1
  177. package/dist/components/auth/authorize/enforcers/resource-role-manager.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/connector.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAGvD,iGAAiG;AACjG,MAAa,uBAAuB;IAClC,2DAA2D;IAC3D,MAAM,CAAC,OAAO,CAAC,IAAqD;QAClE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC;QAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAA,eAAQ,EAAC;gBACb,OAAO,EAAE,IAAI,MAAM,gJAAgJ;aACpK,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAdD,0DAcC"}
@@ -0,0 +1,52 @@
1
+ import type { IdType } from '../../../../base';
2
+ import { BaseHelper } from '@venizia/ignis-helpers/core';
3
+ import { type TCustomGrantMetadata } from '@venizia/ignis-kernel';
4
+ import type { ICasbinPolicySource, IScopedCasbinEntities } from './types';
5
+ /** A custom row that survived {@link CustomGrantExpander.rejectCustomRow}, ready for op-to-catalog resolution. */
6
+ export type TCustomGrantRow = {
7
+ subjectId: IdType;
8
+ objectSubject: string;
9
+ ops: string[];
10
+ domain: string;
11
+ effect: string;
12
+ };
13
+ /**
14
+ * Expands "custom" operation-subset grants (`metadata.ops`) into one casbin line per catalogued
15
+ * operation. Isolated from the filtered-policy loader on purpose: it owns its own SQL
16
+ * (`queryOperationCatalog`) and error vocabulary, and never reaches back into ScopedCasbinAdapter.
17
+ */
18
+ export declare class CustomGrantExpander extends BaseHelper {
19
+ protected readonly dataSource: ICasbinPolicySource;
20
+ protected readonly permission: IScopedCasbinEntities['permission'];
21
+ protected readonly softDelete: IScopedCasbinEntities['softDelete'];
22
+ constructor(opts: {
23
+ dataSource: ICasbinPolicySource;
24
+ entities: Pick<IScopedCasbinEntities, 'permission' | 'softDelete'>;
25
+ });
26
+ /** Why a custom-looking grant row cannot be honoured, or null when it is well formed. */
27
+ rejectCustomRow(opts: {
28
+ row: {
29
+ subjectId: IdType;
30
+ objectCode: string;
31
+ objectMethod: string;
32
+ };
33
+ parsed: TCustomGrantMetadata | null;
34
+ isCustomAction: boolean;
35
+ metadataColumnName?: string;
36
+ }): string | null;
37
+ /** Resolve every custom row's ops in one catalog query, then emit one line per resolved operation. Unresolvable ops come back as `rejections` rather than being logged here - the caller owns the logger the tests swap. */
38
+ expandCustomGrants(opts: {
39
+ subjectType: string;
40
+ customRows: TCustomGrantRow[];
41
+ }): Promise<{
42
+ lines: string[];
43
+ rejections: string[];
44
+ }>;
45
+ /** Schema-qualified table reference (`"<schema>"."<table>"`) for use after FROM/JOIN with an alias. */
46
+ private qualifiedTable;
47
+ /** `AND <alias>.<col> IS NULL` when soft-delete is on, else empty. The alias is emitted raw to match the unquoted FROM alias - quoting folds it to a different case and breaks the join. */
48
+ private softDeleteClause;
49
+ /** Resolve `(subject, method)` pairs to catalogued operations. One query for the whole extraction. */
50
+ private queryOperationCatalog;
51
+ }
52
+ //# sourceMappingURL=custom-grant-expander.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-grant-expander.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/custom-grant-expander.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAI1E,kHAAkH;AAClH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACnD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACnE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBAEvD,IAAI,EAAE;QAChB,UAAU,EAAE,mBAAmB,CAAC;QAChC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;KACpE;IAOD,yFAAyF;IACzF,eAAe,CAAC,IAAI,EAAE;QACpB,GAAG,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC;QACrE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;QACpC,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,MAAM,GAAG,IAAI;IAsBjB,4NAA4N;IACtN,kBAAkB,CAAC,IAAI,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,eAAe,EAAE,CAAC;KAC/B,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAoDtD,uGAAuG;IACvG,OAAO,CAAC,cAAc;IAMtB,4LAA4L;IAC5L,OAAO,CAAC,gBAAgB;IASxB,sGAAsG;YACxF,qBAAqB;CA6BpC"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomGrantExpander = void 0;
4
+ const utilities_1 = require("../../../../utilities");
5
+ const core_1 = require("@venizia/ignis-helpers/core");
6
+ const ignis_kernel_1 = require("@venizia/ignis-kernel");
7
+ const drizzle_orm_1 = require("drizzle-orm");
8
+ const connector_1 = require("./connector");
9
+ const DEFAULT_SCHEMA = 'public';
10
+ /**
11
+ * Expands "custom" operation-subset grants (`metadata.ops`) into one casbin line per catalogued
12
+ * operation. Isolated from the filtered-policy loader on purpose: it owns its own SQL
13
+ * (`queryOperationCatalog`) and error vocabulary, and never reaches back into ScopedCasbinAdapter.
14
+ */
15
+ class CustomGrantExpander extends core_1.BaseHelper {
16
+ constructor(opts) {
17
+ super({ scope: CustomGrantExpander.name });
18
+ this.dataSource = opts.dataSource;
19
+ this.permission = opts.entities.permission;
20
+ this.softDelete = opts.entities.softDelete;
21
+ }
22
+ /** Why a custom-looking grant row cannot be honoured, or null when it is well formed. */
23
+ rejectCustomRow(opts) {
24
+ const { row, parsed, isCustomAction, metadataColumnName } = opts;
25
+ if (isCustomAction && !metadataColumnName) {
26
+ return `Skipping custom grant - entities.policyDefinition.metadata.columnName is not mapped, so metadata.ops cannot be read | subject id: ${row.subjectId} | object: ${row.objectCode}`;
27
+ }
28
+ if (isCustomAction && !parsed) {
29
+ return `Skipping custom grant - metadata.ops is missing, empty, or not an array of non-empty strings | subject id: ${row.subjectId} | object: ${row.objectCode}`;
30
+ }
31
+ if (!isCustomAction && parsed) {
32
+ return `Skipping grant - metadata.ops is present but action is not "${ignis_kernel_1.AuthorizationActions.CUSTOM}", so the intent is ambiguous | subject id: ${row.subjectId} | object: ${row.objectCode}`;
33
+ }
34
+ if (row.objectMethod !== ignis_kernel_1.AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD) {
35
+ return `Skipping custom grant - the target must be a subject-level resource node | subject id: ${row.subjectId} | object: ${row.objectCode}`;
36
+ }
37
+ return null;
38
+ }
39
+ /** Resolve every custom row's ops in one catalog query, then emit one line per resolved operation. Unresolvable ops come back as `rejections` rather than being logged here - the caller owns the logger the tests swap. */
40
+ async expandCustomGrants(opts) {
41
+ if (!opts.customRows.length) {
42
+ return { lines: [], rejections: [] };
43
+ }
44
+ const seen = new Set();
45
+ const pairs = [];
46
+ const candidates = opts.customRows.flatMap(row => row.ops.map(op => ({ subject: row.objectSubject, method: op })));
47
+ for (const candidate of candidates) {
48
+ const key = `${candidate.subject}.${candidate.method}`;
49
+ if (seen.has(key)) {
50
+ continue;
51
+ }
52
+ seen.add(key);
53
+ pairs.push(candidate);
54
+ }
55
+ const catalog = await this.queryOperationCatalog({ pairs });
56
+ const byKey = new Map(catalog.map(entry => [`${entry.subject}.${entry.method}`, entry]));
57
+ const lines = [];
58
+ const rejections = [];
59
+ for (const row of opts.customRows) {
60
+ const { valid, unknown } = ignis_kernel_1.GrantBuilder.getInstance().validateCustomGrantOps({
61
+ ops: row.ops,
62
+ subject: row.objectSubject,
63
+ catalog,
64
+ });
65
+ if (unknown.length) {
66
+ rejections.push(`Skipping unresolvable operations in a custom grant | subject id: ${row.subjectId} | resource: ${row.objectSubject} | unknown: ${unknown.join(', ')}`);
67
+ }
68
+ for (const op of valid) {
69
+ const entry = byKey.get(`${row.objectSubject}.${op}`);
70
+ lines.push(`${ignis_kernel_1.AuthorizationPolicyVariants.GRANT.rule}, ${opts.subjectType}_${row.subjectId}, ${row.domain}, ${entry.code}, ${entry.action}, ${row.effect}`);
71
+ }
72
+ }
73
+ return { lines, rejections };
74
+ }
75
+ /** Schema-qualified table reference (`"<schema>"."<table>"`) for use after FROM/JOIN with an alias. */
76
+ qualifiedTable(opts) {
77
+ const { table } = opts;
78
+ const schema = table.schemaName ?? DEFAULT_SCHEMA;
79
+ return (0, drizzle_orm_1.sql) `${drizzle_orm_1.sql.identifier(schema)}.${drizzle_orm_1.sql.identifier(table.tableName)}`;
80
+ }
81
+ /** `AND <alias>.<col> IS NULL` when soft-delete is on, else empty. The alias is emitted raw to match the unquoted FROM alias - quoting folds it to a different case and breaks the join. */
82
+ softDeleteClause(opts) {
83
+ const sd = this.softDelete;
84
+ if (!sd?.use) {
85
+ return drizzle_orm_1.sql.empty();
86
+ }
87
+ return (0, drizzle_orm_1.sql) ` AND ${drizzle_orm_1.sql.raw(opts.alias)}.${drizzle_orm_1.sql.identifier(sd.columnName)} IS NULL`;
88
+ }
89
+ /** Resolve `(subject, method)` pairs to catalogued operations. One query for the whole extraction. */
90
+ async queryOperationCatalog(opts) {
91
+ if (!opts.pairs.length) {
92
+ return [];
93
+ }
94
+ const permissionTable = this.qualifiedTable({ table: this.permission });
95
+ const connector = connector_1.PolicyConnectorResolver.resolve({
96
+ source: this.dataSource,
97
+ caller: CustomGrantExpander.name,
98
+ });
99
+ const result = await connector.execute((0, drizzle_orm_1.sql) `
100
+ SELECT permission.subject, permission.method, permission.code, permission.action
101
+ FROM ${permissionTable} permission
102
+ WHERE (permission.subject, permission.method) IN (${drizzle_orm_1.sql.join(opts.pairs.map(pair => (0, drizzle_orm_1.sql) `(${pair.subject}, ${pair.method})`), (0, drizzle_orm_1.sql) `, `)})
103
+ AND permission.method <> ${ignis_kernel_1.AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD}${this.softDeleteClause({ alias: 'permission' })}
104
+ `);
105
+ return (0, utilities_1.readResultRows)({
106
+ result,
107
+ });
108
+ }
109
+ }
110
+ exports.CustomGrantExpander = CustomGrantExpander;
111
+ //# sourceMappingURL=custom-grant-expander.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-grant-expander.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/custom-grant-expander.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export * from './base-filtered';
2
+ export * from './connector';
3
+ export * from './custom-grant-expander';
2
4
  export * from './scoped-casbin.adapter';
3
5
  export * from './types';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC"}
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./base-filtered"), exports);
18
+ __exportStar(require("./connector"), exports);
19
+ __exportStar(require("./custom-grant-expander"), exports);
18
20
  __exportStar(require("./scoped-casbin.adapter"), exports);
19
21
  __exportStar(require("./types"), exports);
20
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,0DAAwC;AACxC,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,8CAA4B;AAC5B,0DAAwC;AACxC,0DAAwC;AACxC,0CAAwB"}
@@ -2,9 +2,13 @@ import type { IdType } from '../../../../base';
2
2
  import type { TConstValue, TNullable } from '@venizia/ignis-helpers/common';
3
3
  import { type Model } from 'casbin';
4
4
  import { type SQL } from 'drizzle-orm';
5
- import { type TCustomGrantMetadata } from '@venizia/ignis-kernel';
6
5
  import { BaseFilteredAdapter } from './base-filtered';
6
+ import { CustomGrantExpander } from './custom-grant-expander';
7
7
  import type { ICasbinPolicySource, IScopedCasbinEntities } from './types';
8
+ export type TDomainHierarchyEdge = {
9
+ child: string;
10
+ parent: string;
11
+ };
8
12
  export interface IScopedCasbinPolicyFilter {
9
13
  principal: {
10
14
  type: string;
@@ -35,14 +39,57 @@ export type TPrincipalPolicyRow = TGrantRow & {
35
39
  targetType: TNullable<string>;
36
40
  targetId: IdType;
37
41
  };
38
- /** Filtered casbin adapter for the scoped RBAC model: loads ONE principal's edges (role assignments, memberships, grants) plus the shared structural hierarchy trees as casbin lines. Read-only. */
42
+ /**
43
+ * Per-principal domain edges sourced from business data the app already owns (e.g. a tenant
44
+ * foreign key) - read live on every cache miss, never duplicated into `domain_inherits`. An app
45
+ * whose hierarchy genuinely lives in `domain_inherits` rows does not need this hook at all: the
46
+ * DOMAIN_EDGE branch above already emits those as `g3` lines. `domains` is the principal's own
47
+ * domain closure, already `<Type>_<id>` tokens; the returned edges must be too - neither side
48
+ * re-formats them.
49
+ *
50
+ * `domains` is the principal's **membership closure** - built from `join_domain` rows plus both
51
+ * ends of every `domainEdge` row. It is NOT the set of domains the principal holds a role in via
52
+ * `assign_role`: a principal can carry `assign_role` at a domain it never joined. A hook ported
53
+ * from a mechanism that derived its domains from `assign_role` will silently lose access for
54
+ * exactly those principals - no error, no log, just fewer edges reaching `g`/`g2`/`g3` than before.
55
+ *
56
+ * More than one hierarchy axis (e.g. an organizer tree and a separate region tree)? Write one
57
+ * function per axis and concatenate their results here - this hook deliberately takes a single
58
+ * function, so composition stays visible in the application, not hidden inside the framework:
59
+ * `resolveDomainEdges: async opts => [...(await organizerEdges(opts)), ...(await regionEdges(opts))]`.
60
+ */
61
+ export type TResolveDomainEdgesFn = (opts: {
62
+ principal: {
63
+ type: string;
64
+ id: IdType;
65
+ };
66
+ domains: string[];
67
+ }) => Promise<TDomainHierarchyEdge[]>;
68
+ /**
69
+ * Filtered casbin adapter for the scoped RBAC model: loads ONE principal's edges (role assignments,
70
+ * memberships, grants) plus the shared structural hierarchy trees as casbin lines. Read-only.
71
+ *
72
+ * EVERY branch below must select by `variant = <known value>` or `variant IN (<known values>)`.
73
+ * Never `variant NOT IN (...)`, and never a bare select that classifies afterwards. Applications
74
+ * store their own edge kinds in this same table (declared via `extraVariants`), and an exclusion
75
+ * filter would sweep those unknown rows into a branch that has no idea what they mean. The current
76
+ * shape makes an undeclared variant inert, which is what makes sharing the table safe.
77
+ */
39
78
  export declare class ScopedCasbinAdapter extends BaseFilteredAdapter<IScopedCasbinPolicyFilter> {
40
79
  protected readonly entities: IScopedCasbinEntities;
80
+ protected readonly customGrantExpander: CustomGrantExpander;
81
+ protected readonly resolveDomainEdges?: TResolveDomainEdgesFn;
41
82
  constructor(opts: {
42
83
  dataSource: ICasbinPolicySource;
43
84
  entities: IScopedCasbinEntities;
85
+ resolveDomainEdges?: TResolveDomainEdgesFn;
44
86
  });
45
- /** One wave: the principal-scoped CTE and the merged structural-edges query are issued together - the role closure resolves in SQL, so neither waits on the other. */
87
+ /**
88
+ * One wave: the principal-scoped CTE and the merged structural-edges query are issued together -
89
+ * the role closure resolves in SQL, so neither waits on the other. `resolveDomainEdges` cannot
90
+ * join that wave - it needs the domain closure the principal-scoped CTE produces - but it does
91
+ * not wait for the structural-edges query either: both run concurrently once the closure is known.
92
+ */
46
93
  loadFilteredPolicy(model: Model, filter: IScopedCasbinPolicyFilter): Promise<void>;
47
94
  /** Route one `direct` row to its casbin line, or to the grant batch. */
48
95
  protected collectDirectRow(opts: {
@@ -54,6 +101,20 @@ export declare class ScopedCasbinAdapter extends BaseFilteredAdapter<IScopedCasb
54
101
  lines: string[];
55
102
  directGrants: TGrantRow[];
56
103
  }): void;
104
+ /**
105
+ * Calls the `resolveDomainEdges` hook, if supplied, and turns its edges into `g3` lines using
106
+ * the same shape the DOMAIN_EDGE branch emits. A throwing hook is logged and treated as no
107
+ * edges - the rows already gathered for this principal still load. This is the safe direction:
108
+ * a missing hierarchy edge can only narrow what `g`/`g2`/`g3` reach, never widen it, so the
109
+ * failure degrades to less access rather than either an outage or excess access.
110
+ */
111
+ protected resolveDomainEdgeLines(opts: {
112
+ principal: {
113
+ type: string;
114
+ id: IdType;
115
+ };
116
+ domains: string[];
117
+ }): Promise<string[]>;
57
118
  /** Schema for a table, defaulting to `public`. */
58
119
  protected schemaOf(table: {
59
120
  schemaName?: string;
@@ -81,40 +142,6 @@ export declare class ScopedCasbinAdapter extends BaseFilteredAdapter<IScopedCasb
81
142
  subjectType: string;
82
143
  rows: TGrantRow[];
83
144
  }): Promise<string[]>;
84
- /** Why a custom-looking grant row cannot be honoured, or null when it is well formed. */
85
- protected rejectCustomRow(opts: {
86
- row: {
87
- subjectId: IdType;
88
- objectCode: string;
89
- objectMethod: string;
90
- };
91
- parsed: TCustomGrantMetadata | null;
92
- isCustomAction: boolean;
93
- metadataColumnName?: string;
94
- }): string | null;
95
- /** Resolve every custom row's ops in one catalog query, then emit one line per resolved operation. */
96
- protected expandCustomGrants(opts: {
97
- subjectType: string;
98
- customRows: Array<{
99
- subjectId: IdType;
100
- objectSubject: string;
101
- ops: string[];
102
- domain: string;
103
- effect: string;
104
- }>;
105
- }): Promise<string[]>;
106
- /** Resolve `(subject, method)` pairs to catalogued operations. One query for the whole extraction. */
107
- protected queryOperationCatalog(opts: {
108
- pairs: Array<{
109
- subject: string;
110
- method: string;
111
- }>;
112
- }): Promise<Array<{
113
- subject: string;
114
- method: string;
115
- code: string;
116
- action: string;
117
- }>>;
118
145
  /** The two code-fixed structural trees only (`g4` resource, `g5` action) - constant regardless of tenant count. Domain edges (`g3`) grow with the domain count, so they are principal-scoped in {@link queryPrincipalPolicies} instead. */
119
146
  protected queryEdgePolicies(): Promise<string[]>;
120
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scoped-casbin.adapter.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/scoped-casbin.adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scoped-casbin.adapter.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/scoped-casbin.adapter.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ const drizzle_orm_1 = require("drizzle-orm");
5
5
  const ignis_kernel_1 = require("@venizia/ignis-kernel");
6
6
  const ignis_kernel_2 = require("@venizia/ignis-kernel");
7
7
  const base_filtered_1 = require("./base-filtered");
8
+ const custom_grant_expander_1 = require("./custom-grant-expander");
8
9
  class PrincipalPolicyEdges {
9
10
  static { this.DIRECT = 'direct'; }
10
11
  static { this.ROLE_EDGE = 'roleEdge'; }
@@ -13,23 +14,42 @@ class PrincipalPolicyEdges {
13
14
  }
14
15
  exports.PrincipalPolicyEdges = PrincipalPolicyEdges;
15
16
  const DEFAULT_SCHEMA = 'public';
16
- /** Filtered casbin adapter for the scoped RBAC model: loads ONE principal's edges (role assignments, memberships, grants) plus the shared structural hierarchy trees as casbin lines. Read-only. */
17
+ /**
18
+ * Filtered casbin adapter for the scoped RBAC model: loads ONE principal's edges (role assignments,
19
+ * memberships, grants) plus the shared structural hierarchy trees as casbin lines. Read-only.
20
+ *
21
+ * EVERY branch below must select by `variant = <known value>` or `variant IN (<known values>)`.
22
+ * Never `variant NOT IN (...)`, and never a bare select that classifies afterwards. Applications
23
+ * store their own edge kinds in this same table (declared via `extraVariants`), and an exclusion
24
+ * filter would sweep those unknown rows into a branch that has no idea what they mean. The current
25
+ * shape makes an undeclared variant inert, which is what makes sharing the table safe.
26
+ */
17
27
  class ScopedCasbinAdapter extends base_filtered_1.BaseFilteredAdapter {
18
28
  constructor(opts) {
19
29
  super({ scope: ScopedCasbinAdapter.name, dataSource: opts.dataSource });
20
30
  this.entities = opts.entities;
31
+ this.resolveDomainEdges = opts.resolveDomainEdges;
32
+ this.customGrantExpander = new custom_grant_expander_1.CustomGrantExpander({
33
+ dataSource: opts.dataSource,
34
+ entities: { permission: opts.entities.permission, softDelete: opts.entities.softDelete },
35
+ });
21
36
  }
22
- /** One wave: the principal-scoped CTE and the merged structural-edges query are issued together - the role closure resolves in SQL, so neither waits on the other. */
37
+ /**
38
+ * One wave: the principal-scoped CTE and the merged structural-edges query are issued together -
39
+ * the role closure resolves in SQL, so neither waits on the other. `resolveDomainEdges` cannot
40
+ * join that wave - it needs the domain closure the principal-scoped CTE produces - but it does
41
+ * not wait for the structural-edges query either: both run concurrently once the closure is known.
42
+ */
23
43
  async loadFilteredPolicy(model, filter) {
24
44
  const { principal } = filter;
25
45
  const { principals } = this.entities;
26
- const [principalRows, structuralEdges] = await Promise.all([
27
- this.queryPrincipalPolicies({ principal }),
28
- this.queryEdgePolicies(),
29
- ]);
46
+ const principalPoliciesPromise = this.queryPrincipalPolicies({ principal });
47
+ const structuralEdgesPromise = this.queryEdgePolicies();
48
+ const principalRows = await principalPoliciesPromise;
30
49
  const lines = [];
31
50
  const directGrants = [];
32
51
  const roleGrants = [];
52
+ const domainClosure = new Set();
33
53
  for (const row of principalRows) {
34
54
  switch (row.kind) {
35
55
  case PrincipalPolicyEdges.ROLE_EDGE: {
@@ -42,17 +62,32 @@ class ScopedCasbinAdapter extends base_filtered_1.BaseFilteredAdapter {
42
62
  }
43
63
  case PrincipalPolicyEdges.DOMAIN_EDGE: {
44
64
  lines.push(`${ignis_kernel_2.AuthorizationPolicyVariants.DOMAIN_INHERITS.rule}, ${row.subjectId}, ${row.targetId}`);
65
+ // Both ends are, by construction, members of the principal's domain_closure CTE.
66
+ domainClosure.add(String(row.subjectId));
67
+ domainClosure.add(String(row.targetId));
45
68
  break;
46
69
  }
47
70
  default: {
71
+ if (row.variant === ignis_kernel_2.AuthorizationPolicyVariants.JOIN_DOMAIN.action) {
72
+ domainClosure.add(`${row.targetType}_${row.targetId}`);
73
+ }
48
74
  this.collectDirectRow({ row, principal, lines, directGrants });
49
75
  break;
50
76
  }
51
77
  }
52
78
  }
79
+ const hookLinesPromise = this.resolveDomainEdgeLines({
80
+ principal,
81
+ domains: [...domainClosure],
82
+ });
53
83
  lines.push(...(await this.buildGrantLines({ subjectType: principal.type, rows: directGrants })));
54
84
  lines.push(...(await this.buildGrantLines({ subjectType: principals.role, rows: roleGrants })));
85
+ const [structuralEdges, hookLines] = await Promise.all([
86
+ structuralEdgesPromise,
87
+ hookLinesPromise,
88
+ ]);
55
89
  lines.push(...structuralEdges);
90
+ lines.push(...hookLines);
56
91
  await this.loadLines({ model, lines });
57
92
  }
58
93
  /** Route one `direct` row to its casbin line, or to the grant batch. */
@@ -80,6 +115,29 @@ class ScopedCasbinAdapter extends base_filtered_1.BaseFilteredAdapter {
80
115
  }
81
116
  }
82
117
  }
118
+ /**
119
+ * Calls the `resolveDomainEdges` hook, if supplied, and turns its edges into `g3` lines using
120
+ * the same shape the DOMAIN_EDGE branch emits. A throwing hook is logged and treated as no
121
+ * edges - the rows already gathered for this principal still load. This is the safe direction:
122
+ * a missing hierarchy edge can only narrow what `g`/`g2`/`g3` reach, never widen it, so the
123
+ * failure degrades to less access rather than either an outage or excess access.
124
+ */
125
+ async resolveDomainEdgeLines(opts) {
126
+ if (!this.resolveDomainEdges) {
127
+ return [];
128
+ }
129
+ let edges;
130
+ try {
131
+ edges = await this.resolveDomainEdges(opts);
132
+ }
133
+ catch (error) {
134
+ this.logger
135
+ .for(this.resolveDomainEdgeLines.name)
136
+ .error('resolveDomainEdges hook threw - continuing without its edges for this load | principal: %s_%s | error: %s', opts.principal.type, opts.principal.id, error);
137
+ return [];
138
+ }
139
+ return edges.map(edge => `${ignis_kernel_2.AuthorizationPolicyVariants.DOMAIN_INHERITS.rule}, ${edge.child}, ${edge.parent}`);
140
+ }
83
141
  /** Schema for a table, defaulting to `public`. */
84
142
  schemaOf(table) {
85
143
  return table.schemaName ?? DEFAULT_SCHEMA;
@@ -268,7 +326,7 @@ class ScopedCasbinAdapter extends base_filtered_1.BaseFilteredAdapter {
268
326
  .error('Skipping custom grant row whose subject or method did not resolve - the target is missing or soft-deleted | subject: %s_%s | object: %s', subjectType, row.subjectId, row.objectCode);
269
327
  continue;
270
328
  }
271
- const rejection = this.rejectCustomRow({
329
+ const rejection = this.customGrantExpander.rejectCustomRow({
272
330
  row: {
273
331
  subjectId: row.subjectId,
274
332
  objectCode: row.objectCode,
@@ -290,78 +348,13 @@ class ScopedCasbinAdapter extends base_filtered_1.BaseFilteredAdapter {
290
348
  effect,
291
349
  });
292
350
  }
293
- lines.push(...(await this.expandCustomGrants({ subjectType, customRows })));
294
- return lines;
295
- }
296
- /** Why a custom-looking grant row cannot be honoured, or null when it is well formed. */
297
- rejectCustomRow(opts) {
298
- const { row, parsed, isCustomAction, metadataColumnName } = opts;
299
- if (isCustomAction && !metadataColumnName) {
300
- return `Skipping custom grant - entities.policyDefinition.metadata.columnName is not mapped, so metadata.ops cannot be read | subject id: ${row.subjectId} | object: ${row.objectCode}`;
301
- }
302
- if (isCustomAction && !parsed) {
303
- return `Skipping custom grant - metadata.ops is missing, empty, or not an array of non-empty strings | subject id: ${row.subjectId} | object: ${row.objectCode}`;
304
- }
305
- if (!isCustomAction && parsed) {
306
- return `Skipping grant - metadata.ops is present but action is not "${ignis_kernel_2.AuthorizationActions.CUSTOM}", so the intent is ambiguous | subject id: ${row.subjectId} | object: ${row.objectCode}`;
307
- }
308
- if (row.objectMethod !== ignis_kernel_1.AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD) {
309
- return `Skipping custom grant - the target must be a subject-level resource node | subject id: ${row.subjectId} | object: ${row.objectCode}`;
310
- }
311
- return null;
312
- }
313
- /** Resolve every custom row's ops in one catalog query, then emit one line per resolved operation. */
314
- async expandCustomGrants(opts) {
315
- if (!opts.customRows.length) {
316
- return [];
317
- }
318
- const seen = new Set();
319
- const pairs = [];
320
- const candidates = opts.customRows.flatMap(row => row.ops.map(op => ({ subject: row.objectSubject, method: op })));
321
- for (const candidate of candidates) {
322
- const key = `${candidate.subject}.${candidate.method}`;
323
- if (seen.has(key)) {
324
- continue;
325
- }
326
- seen.add(key);
327
- pairs.push(candidate);
328
- }
329
- const catalog = await this.queryOperationCatalog({ pairs });
330
- const byKey = new Map(catalog.map(entry => [`${entry.subject}.${entry.method}`, entry]));
331
- const lines = [];
332
- for (const row of opts.customRows) {
333
- const { valid, unknown } = ignis_kernel_1.GrantBuilder.getInstance().validateCustomGrantOps({
334
- ops: row.ops,
335
- subject: row.objectSubject,
336
- catalog,
337
- });
338
- if (unknown.length) {
339
- this.logger
340
- .for(this.expandCustomGrants.name)
341
- .error('Skipping unresolvable operations in a custom grant | subject id: %s | resource: %s | unknown: %s', row.subjectId, row.objectSubject, unknown.join(', '));
342
- }
343
- for (const op of valid) {
344
- const entry = byKey.get(`${row.objectSubject}.${op}`);
345
- lines.push(`${ignis_kernel_2.AuthorizationPolicyVariants.GRANT.rule}, ${opts.subjectType}_${row.subjectId}, ${row.domain}, ${entry.code}, ${entry.action}, ${row.effect}`);
346
- }
351
+ const expanded = await this.customGrantExpander.expandCustomGrants({ subjectType, customRows });
352
+ for (const rejection of expanded.rejections) {
353
+ this.logger.for(this.buildGrantLines.name).error(rejection);
347
354
  }
355
+ lines.push(...expanded.lines);
348
356
  return lines;
349
357
  }
350
- /** Resolve `(subject, method)` pairs to catalogued operations. One query for the whole extraction. */
351
- async queryOperationCatalog(opts) {
352
- if (!opts.pairs.length) {
353
- return [];
354
- }
355
- const permissionTable = this.qualifiedTable({ table: this.entities.permission });
356
- return this.query({
357
- statement: (0, drizzle_orm_1.sql) `
358
- SELECT permission.subject, permission.method, permission.code, permission.action
359
- FROM ${permissionTable} permission
360
- WHERE (permission.subject, permission.method) IN (${drizzle_orm_1.sql.join(opts.pairs.map(pair => (0, drizzle_orm_1.sql) `(${pair.subject}, ${pair.method})`), (0, drizzle_orm_1.sql) `, `)})
361
- AND permission.method <> ${ignis_kernel_1.AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD}${this.softDeleteClause({ alias: 'permission' })}
362
- `,
363
- });
364
- }
365
358
  /** The two code-fixed structural trees only (`g4` resource, `g5` action) - constant regardless of tenant count. Domain edges (`g3`) grow with the domain count, so they are principal-scoped in {@link queryPrincipalPolicies} instead. */
366
359
  async queryEdgePolicies() {
367
360
  const { policyDefinition, permission } = this.entities;
@@ -1 +1 @@
1
- {"version":3,"file":"scoped-casbin.adapter.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/scoped-casbin.adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scoped-casbin.adapter.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/scoped-casbin.adapter.ts"],"names":[],"mappings":"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"}