@venizia/ignis 0.0.9-8 → 0.0.9

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 (196) hide show
  1. package/README.md +15 -15
  2. package/dist/base/metadata/persistents.d.ts.map +1 -1
  3. package/dist/base/metadata/persistents.js +6 -0
  4. package/dist/base/metadata/persistents.js.map +1 -1
  5. package/dist/base/middlewares/app-error/app-error.middleware.d.ts +15 -0
  6. package/dist/base/middlewares/app-error/app-error.middleware.d.ts.map +1 -0
  7. package/dist/base/middlewares/app-error/app-error.middleware.js +81 -0
  8. package/dist/base/middlewares/app-error/app-error.middleware.js.map +1 -0
  9. package/dist/base/middlewares/app-error/database.handler.d.ts +20 -0
  10. package/dist/base/middlewares/app-error/database.handler.d.ts.map +1 -0
  11. package/dist/base/middlewares/app-error/database.handler.js +55 -0
  12. package/dist/base/middlewares/app-error/database.handler.js.map +1 -0
  13. package/dist/base/middlewares/app-error/definition.d.ts +59 -0
  14. package/dist/base/middlewares/app-error/definition.d.ts.map +1 -0
  15. package/dist/base/middlewares/app-error/definition.js +98 -0
  16. package/dist/base/middlewares/app-error/definition.js.map +1 -0
  17. package/dist/base/middlewares/app-error/index.d.ts +2 -0
  18. package/dist/base/middlewares/app-error/index.d.ts.map +1 -0
  19. package/dist/{components/auth/authorize/models/abilities → base/middlewares/app-error}/index.js +1 -2
  20. package/dist/base/middlewares/app-error/index.js.map +1 -0
  21. package/dist/base/middlewares/app-error/types.d.ts +18 -0
  22. package/dist/base/middlewares/app-error/types.d.ts.map +1 -0
  23. package/dist/base/middlewares/app-error/types.js +3 -0
  24. package/dist/base/middlewares/app-error/types.js.map +1 -0
  25. package/dist/base/middlewares/app-error/zod.handler.d.ts +28 -0
  26. package/dist/base/middlewares/app-error/zod.handler.d.ts.map +1 -0
  27. package/dist/base/middlewares/app-error/zod.handler.js +64 -0
  28. package/dist/base/middlewares/app-error/zod.handler.js.map +1 -0
  29. package/dist/base/middlewares/emoji-favicon/emoji-favicon.middleware.d.ts.map +1 -0
  30. package/dist/base/middlewares/emoji-favicon/emoji-favicon.middleware.js.map +1 -0
  31. package/dist/base/middlewares/emoji-favicon/index.d.ts +2 -0
  32. package/dist/base/middlewares/emoji-favicon/index.d.ts.map +1 -0
  33. package/dist/base/middlewares/emoji-favicon/index.js +18 -0
  34. package/dist/base/middlewares/emoji-favicon/index.js.map +1 -0
  35. package/dist/base/middlewares/index.d.ts +4 -4
  36. package/dist/base/middlewares/index.d.ts.map +1 -1
  37. package/dist/base/middlewares/index.js +4 -4
  38. package/dist/base/middlewares/index.js.map +1 -1
  39. package/dist/base/middlewares/not-found/index.d.ts +2 -0
  40. package/dist/base/middlewares/not-found/index.d.ts.map +1 -0
  41. package/dist/base/middlewares/not-found/index.js +18 -0
  42. package/dist/base/middlewares/not-found/index.js.map +1 -0
  43. package/dist/base/middlewares/{not-found.middleware.d.ts → not-found/not-found.middleware.d.ts} +0 -1
  44. package/dist/base/middlewares/not-found/not-found.middleware.d.ts.map +1 -0
  45. package/dist/base/middlewares/{not-found.middleware.js → not-found/not-found.middleware.js} +2 -3
  46. package/dist/base/middlewares/{not-found.middleware.js.map → not-found/not-found.middleware.js.map} +1 -1
  47. package/dist/base/middlewares/request-spy/index.d.ts +2 -0
  48. package/dist/base/middlewares/request-spy/index.d.ts.map +1 -0
  49. package/dist/base/middlewares/request-spy/index.js +18 -0
  50. package/dist/base/middlewares/request-spy/index.js.map +1 -0
  51. package/dist/base/middlewares/{request-spy.middleware.d.ts → request-spy/request-spy.middleware.d.ts} +1 -1
  52. package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -0
  53. package/dist/base/middlewares/{request-spy.middleware.js → request-spy/request-spy.middleware.js} +1 -1
  54. package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -0
  55. package/dist/base/models/common/columns.d.ts +22 -0
  56. package/dist/base/models/common/columns.d.ts.map +1 -0
  57. package/dist/base/models/common/columns.js +43 -0
  58. package/dist/base/models/common/columns.js.map +1 -0
  59. package/dist/base/models/common/index.d.ts +1 -0
  60. package/dist/base/models/common/index.d.ts.map +1 -1
  61. package/dist/base/models/common/index.js +1 -0
  62. package/dist/base/models/common/index.js.map +1 -1
  63. package/dist/base/models/enrichers/principal.enricher.d.ts +6 -5
  64. package/dist/base/models/enrichers/principal.enricher.d.ts.map +1 -1
  65. package/dist/base/models/enrichers/principal.enricher.js +8 -3
  66. package/dist/base/models/enrichers/principal.enricher.js.map +1 -1
  67. package/dist/base/models/enrichers/tz.enricher.d.ts +9 -8
  68. package/dist/base/models/enrichers/tz.enricher.d.ts.map +1 -1
  69. package/dist/base/models/enrichers/tz.enricher.js +10 -10
  70. package/dist/base/models/enrichers/tz.enricher.js.map +1 -1
  71. package/dist/base/repositories/core/abstract.d.ts +2 -0
  72. package/dist/base/repositories/core/abstract.d.ts.map +1 -1
  73. package/dist/base/repositories/core/readable.d.ts.map +1 -1
  74. package/dist/base/repositories/core/readable.js +17 -5
  75. package/dist/base/repositories/core/readable.js.map +1 -1
  76. package/dist/base/repositories/core/soft-deletable.d.ts +1 -1
  77. package/dist/base/repositories/core/soft-deletable.d.ts.map +1 -1
  78. package/dist/base/repositories/mixins/default-filter.d.ts +3 -0
  79. package/dist/base/repositories/mixins/default-filter.d.ts.map +1 -1
  80. package/dist/base/repositories/mixins/default-filter.js +11 -0
  81. package/dist/base/repositories/mixins/default-filter.js.map +1 -1
  82. package/dist/base/repositories/operators/filter.d.ts +4 -0
  83. package/dist/base/repositories/operators/filter.d.ts.map +1 -1
  84. package/dist/base/repositories/operators/filter.js +19 -1
  85. package/dist/base/repositories/operators/filter.js.map +1 -1
  86. package/dist/components/auth/authorize/adapters/base-filtered.d.ts +26 -56
  87. package/dist/components/auth/authorize/adapters/base-filtered.d.ts.map +1 -1
  88. package/dist/components/auth/authorize/adapters/base-filtered.js +23 -70
  89. package/dist/components/auth/authorize/adapters/base-filtered.js.map +1 -1
  90. package/dist/components/auth/authorize/adapters/index.d.ts +2 -1
  91. package/dist/components/auth/authorize/adapters/index.d.ts.map +1 -1
  92. package/dist/components/auth/authorize/adapters/index.js +2 -1
  93. package/dist/components/auth/authorize/adapters/index.js.map +1 -1
  94. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts +138 -0
  95. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +1 -0
  96. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js +300 -0
  97. package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +1 -0
  98. package/dist/components/auth/authorize/adapters/types.d.ts +31 -0
  99. package/dist/components/auth/authorize/adapters/types.d.ts.map +1 -0
  100. package/dist/components/auth/authorize/adapters/types.js +3 -0
  101. package/dist/components/auth/authorize/adapters/types.js.map +1 -0
  102. package/dist/components/auth/authorize/common/constants.d.ts +144 -8
  103. package/dist/components/auth/authorize/common/constants.d.ts.map +1 -1
  104. package/dist/components/auth/authorize/common/constants.js +171 -13
  105. package/dist/components/auth/authorize/common/constants.js.map +1 -1
  106. package/dist/components/auth/authorize/common/index.d.ts +4 -0
  107. package/dist/components/auth/authorize/common/index.d.ts.map +1 -1
  108. package/dist/components/auth/authorize/common/index.js +4 -0
  109. package/dist/components/auth/authorize/common/index.js.map +1 -1
  110. package/dist/components/auth/authorize/common/object-match.d.ts +21 -0
  111. package/dist/components/auth/authorize/common/object-match.d.ts.map +1 -0
  112. package/dist/components/auth/authorize/common/object-match.js +33 -0
  113. package/dist/components/auth/authorize/common/object-match.js.map +1 -0
  114. package/dist/components/auth/authorize/common/permission-builder.d.ts +92 -0
  115. package/dist/components/auth/authorize/common/permission-builder.d.ts.map +1 -0
  116. package/dist/components/auth/authorize/common/permission-builder.js +99 -0
  117. package/dist/components/auth/authorize/common/permission-builder.js.map +1 -0
  118. package/dist/components/auth/authorize/common/policy-builder.d.ts +183 -0
  119. package/dist/components/auth/authorize/common/policy-builder.d.ts.map +1 -0
  120. package/dist/components/auth/authorize/common/policy-builder.js +130 -0
  121. package/dist/components/auth/authorize/common/policy-builder.js.map +1 -0
  122. package/dist/components/auth/authorize/common/resolve-request-domain.d.ts +20 -0
  123. package/dist/components/auth/authorize/common/resolve-request-domain.d.ts.map +1 -0
  124. package/dist/components/auth/authorize/common/resolve-request-domain.js +59 -0
  125. package/dist/components/auth/authorize/common/resolve-request-domain.js.map +1 -0
  126. package/dist/components/auth/authorize/common/types.d.ts +70 -23
  127. package/dist/components/auth/authorize/common/types.d.ts.map +1 -1
  128. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts +120 -28
  129. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts.map +1 -1
  130. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js +324 -124
  131. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js.map +1 -1
  132. package/dist/components/auth/authorize/enforcers/enforcer-registry.d.ts +19 -1
  133. package/dist/components/auth/authorize/enforcers/enforcer-registry.d.ts.map +1 -1
  134. package/dist/components/auth/authorize/enforcers/enforcer-registry.js +23 -0
  135. package/dist/components/auth/authorize/enforcers/enforcer-registry.js.map +1 -1
  136. package/dist/components/auth/authorize/enforcers/index.d.ts +1 -0
  137. package/dist/components/auth/authorize/enforcers/index.d.ts.map +1 -1
  138. package/dist/components/auth/authorize/enforcers/index.js +1 -0
  139. package/dist/components/auth/authorize/enforcers/index.js.map +1 -1
  140. package/dist/components/auth/authorize/enforcers/models/index.d.ts +2 -0
  141. package/dist/components/auth/authorize/enforcers/models/index.d.ts.map +1 -0
  142. package/dist/components/auth/authorize/enforcers/models/index.js +18 -0
  143. package/dist/components/auth/authorize/enforcers/models/index.js.map +1 -0
  144. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.d.ts +32 -0
  145. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.d.ts.map +1 -0
  146. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.js +54 -0
  147. package/dist/components/auth/authorize/enforcers/models/rbac-domain.model.js.map +1 -0
  148. package/dist/components/auth/authorize/models/index.d.ts +0 -1
  149. package/dist/components/auth/authorize/models/index.d.ts.map +1 -1
  150. package/dist/components/auth/authorize/models/index.js +0 -1
  151. package/dist/components/auth/authorize/models/index.js.map +1 -1
  152. package/dist/components/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
  153. package/dist/components/auth/authorize/providers/authorization.provider.js +12 -0
  154. package/dist/components/auth/authorize/providers/authorization.provider.js.map +1 -1
  155. package/dist/components/auth/models/entities/permission.model.d.ts +2 -0
  156. package/dist/components/auth/models/entities/permission.model.d.ts.map +1 -1
  157. package/dist/components/auth/models/entities/permission.model.js +4 -0
  158. package/dist/components/auth/models/entities/permission.model.js.map +1 -1
  159. package/dist/components/auth/models/entities/user.model.d.ts +16 -2
  160. package/dist/components/auth/models/entities/user.model.d.ts.map +1 -1
  161. package/dist/components/auth/models/entities/user.model.js +3 -2
  162. package/dist/components/auth/models/entities/user.model.js.map +1 -1
  163. package/dist/components/mail/helpers/executors/internal-queue-executor.helper.d.ts.map +1 -1
  164. package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js +1 -1
  165. package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js.map +1 -1
  166. package/dist/components/static-asset/models/base.model.d.ts +24 -16
  167. package/dist/components/static-asset/models/base.model.d.ts.map +1 -1
  168. package/dist/helpers/inversion/common/types.d.ts +2 -0
  169. package/dist/helpers/inversion/common/types.d.ts.map +1 -1
  170. package/package.json +6 -5
  171. package/dist/base/middlewares/app-error.middleware.d.ts +0 -8
  172. package/dist/base/middlewares/app-error.middleware.d.ts.map +0 -1
  173. package/dist/base/middlewares/app-error.middleware.js +0 -138
  174. package/dist/base/middlewares/app-error.middleware.js.map +0 -1
  175. package/dist/base/middlewares/emoji-favicon.middleware.d.ts.map +0 -1
  176. package/dist/base/middlewares/emoji-favicon.middleware.js.map +0 -1
  177. package/dist/base/middlewares/not-found.middleware.d.ts.map +0 -1
  178. package/dist/base/middlewares/request-spy.middleware.d.ts.map +0 -1
  179. package/dist/base/middlewares/request-spy.middleware.js.map +0 -1
  180. package/dist/components/auth/authorize/adapters/drizzle-casbin.d.ts +0 -46
  181. package/dist/components/auth/authorize/adapters/drizzle-casbin.d.ts.map +0 -1
  182. package/dist/components/auth/authorize/adapters/drizzle-casbin.js +0 -104
  183. package/dist/components/auth/authorize/adapters/drizzle-casbin.js.map +0 -1
  184. package/dist/components/auth/authorize/models/abilities/index.d.ts +0 -3
  185. package/dist/components/auth/authorize/models/abilities/index.d.ts.map +0 -1
  186. package/dist/components/auth/authorize/models/abilities/index.js.map +0 -1
  187. package/dist/components/auth/authorize/models/abilities/string-action.model.d.ts +0 -14
  188. package/dist/components/auth/authorize/models/abilities/string-action.model.d.ts.map +0 -1
  189. package/dist/components/auth/authorize/models/abilities/string-action.model.js +0 -23
  190. package/dist/components/auth/authorize/models/abilities/string-action.model.js.map +0 -1
  191. package/dist/components/auth/authorize/models/abilities/string-resource.model.d.ts +0 -13
  192. package/dist/components/auth/authorize/models/abilities/string-resource.model.d.ts.map +0 -1
  193. package/dist/components/auth/authorize/models/abilities/string-resource.model.js +0 -19
  194. package/dist/components/auth/authorize/models/abilities/string-resource.model.js.map +0 -1
  195. /package/dist/base/middlewares/{emoji-favicon.middleware.d.ts → emoji-favicon/emoji-favicon.middleware.d.ts} +0 -0
  196. /package/dist/base/middlewares/{emoji-favicon.middleware.js → emoji-favicon/emoji-favicon.middleware.js} +0 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthorizationPermissionBuilder = void 0;
4
+ const constants_1 = require("./constants");
5
+ /**
6
+ * Builders for `Permission` catalog rows (the `obj` axis the scoped matcher resolves).
7
+ *
8
+ * Generic over the name/description type (`TName`) so an app with i18n `name`/`description` columns and
9
+ * one with plain-text names both fit. Produces the framework-owned columns
10
+ * (code/subject/method/action/scope/description/parentId); `description` defaults to `null`.
11
+ * App-specific columns are added by the caller.
12
+ */
13
+ class AuthorizationPermissionBuilder {
14
+ /** Sentinel `method` for a coarse resource node (a grant target that is not a route). */
15
+ static { this.RESOURCE_NODE_METHOD = '*'; }
16
+ /** Standard repository method → base action. Unlisted methods (custom ops, aggregates) resolve to `execute`. */
17
+ static { this.METHOD_ACTIONS = {
18
+ find: constants_1.AuthorizationActions.READ,
19
+ findById: constants_1.AuthorizationActions.READ,
20
+ findOne: constants_1.AuthorizationActions.READ,
21
+ count: constants_1.AuthorizationActions.READ,
22
+ create: constants_1.AuthorizationActions.CREATE,
23
+ updateById: constants_1.AuthorizationActions.UPDATE,
24
+ updateBy: constants_1.AuthorizationActions.UPDATE,
25
+ deleteById: constants_1.AuthorizationActions.DELETE,
26
+ deleteBy: constants_1.AuthorizationActions.DELETE,
27
+ }; }
28
+ /** The CRUD methods {@link crud} generates by default. */
29
+ static { this.DEFAULT_CRUD_METHODS = [
30
+ 'find',
31
+ 'findById',
32
+ 'findOne',
33
+ 'count',
34
+ 'create',
35
+ 'updateById',
36
+ 'updateBy',
37
+ 'deleteById',
38
+ 'deleteBy',
39
+ ]; }
40
+ /** Base action for a method: a known CRUD method maps to read/create/update/delete; anything else → `execute`. */
41
+ static actionForMethod(method) {
42
+ return AuthorizationPermissionBuilder.METHOD_ACTIONS[method] ?? constants_1.AuthorizationActions.EXECUTE;
43
+ }
44
+ /** One operation-level permission, `code = <subject>.<method>`. `action` defaults to {@link actionForMethod}. */
45
+ static operation(opts) {
46
+ return {
47
+ code: [opts.subject, opts.method].join('.'),
48
+ subject: opts.subject,
49
+ method: opts.method,
50
+ action: opts.action ?? AuthorizationPermissionBuilder.actionForMethod(opts.method),
51
+ scope: opts.scope,
52
+ description: opts.description ?? null,
53
+ parentId: opts.parentId ?? null,
54
+ name: opts.name,
55
+ };
56
+ }
57
+ /**
58
+ * A coarse resource node (module or subject) used as a grant target, e.g. `Sale` or `SaleOrder`.
59
+ * `code` is the bare name (no dotted method); `method` is the {@link RESOURCE_NODE_METHOD} sentinel.
60
+ * `action` defaults to `manage` (the broadest), though the grant on this node carries its own action.
61
+ */
62
+ static resourceNode(opts) {
63
+ return {
64
+ code: opts.code,
65
+ subject: opts.subject ?? opts.code,
66
+ method: AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD,
67
+ action: opts.action ?? constants_1.AuthorizationActions.MANAGE,
68
+ scope: opts.scope,
69
+ description: opts.description ?? null,
70
+ parentId: opts.parentId ?? null,
71
+ name: opts.name,
72
+ };
73
+ }
74
+ /**
75
+ * The CRUD permission set for a subject. `name` (and optional `description`) are per-method formatters,
76
+ * so the app supplies its own labels/i18n; the framework only owns the method→action map and code shape.
77
+ */
78
+ static crud(opts) {
79
+ const methods = opts.methods ?? AuthorizationPermissionBuilder.DEFAULT_CRUD_METHODS;
80
+ return methods.map(method => {
81
+ const action = AuthorizationPermissionBuilder.actionForMethod(method);
82
+ const ctx = {
83
+ subject: opts.subject,
84
+ method,
85
+ action,
86
+ };
87
+ return AuthorizationPermissionBuilder.operation({
88
+ subject: opts.subject,
89
+ method,
90
+ scope: opts.scope,
91
+ action,
92
+ name: opts.name(ctx),
93
+ description: opts.description ? opts.description(ctx) : undefined,
94
+ });
95
+ });
96
+ }
97
+ }
98
+ exports.AuthorizationPermissionBuilder = AuthorizationPermissionBuilder;
99
+ //# sourceMappingURL=permission-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-builder.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/common/permission-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { IdType } from '../../../../base';
2
+ import { TNullable } from '../../../../helpers';
3
+ import { TAuthorizationAction, TAuthorizationDecision } from './constants';
4
+ /** A grant/assignment domain: a scope literal (`SYSTEM_WIDE`/`ANY_MEMBER`) or a typed domain entity. */
5
+ export type TPolicyDomainInput = string | {
6
+ type: string;
7
+ id: IdType;
8
+ };
9
+ export declare class AuthorizationPolicyBuilder {
10
+ static readonly ACTION_PRINCIPAL = "Action";
11
+ /**
12
+ * Serialize a domain to the casbin token the matcher compares against {@link resolveRequestDomain}'s
13
+ * output: a scope literal (`SYSTEM_WIDE`/`ANY_MEMBER`) passes through unchanged; a typed domain becomes
14
+ * `<type>_<id>` so `g3(r.dom, p.dom)` cascades; null ⇒ null (the adapter then defaults grants to `ANY_MEMBER`).
15
+ */
16
+ private static serializeDomain;
17
+ /**
18
+ * A grant (casbin `p`): role/user → permission, carrying action + effect + domain.
19
+ * `domain` null ⇒ `ANY_MEMBER` (adapter default). Pass a scope literal or a typed `{ type, id }` domain.
20
+ */
21
+ static grant(opts: {
22
+ subject: {
23
+ type: string;
24
+ id: IdType;
25
+ };
26
+ permission: {
27
+ type: string;
28
+ id: IdType;
29
+ };
30
+ action: string;
31
+ domain?: TNullable<TPolicyDomainInput>;
32
+ effect: TAuthorizationDecision;
33
+ }): {
34
+ variant: "grant";
35
+ subjectType: string;
36
+ subjectId: IdType;
37
+ targetType: string;
38
+ targetId: IdType;
39
+ action: string;
40
+ effect: string;
41
+ domain: TNullable<string>;
42
+ };
43
+ /** Assign a role to a user (casbin `g`). `domain` null ⇒ `*` (every domain). */
44
+ static assignRole(opts: {
45
+ user: {
46
+ type: string;
47
+ id: IdType;
48
+ };
49
+ role: {
50
+ type: string;
51
+ id: IdType;
52
+ };
53
+ domain?: TNullable<TPolicyDomainInput>;
54
+ }): {
55
+ variant: "assign_role";
56
+ subjectType: string;
57
+ subjectId: IdType;
58
+ targetType: string;
59
+ targetId: IdType;
60
+ domain: TNullable<string>;
61
+ };
62
+ /** A user joins a domain (casbin `g2`) — backs the `ANY_MEMBER` grant scope. */
63
+ static joinDomain(opts: {
64
+ user: {
65
+ type: string;
66
+ id: IdType;
67
+ };
68
+ domain: {
69
+ type: string;
70
+ id: IdType;
71
+ };
72
+ }): {
73
+ variant: "join_domain";
74
+ subjectType: string;
75
+ subjectId: IdType;
76
+ targetType: string;
77
+ targetId: IdType;
78
+ };
79
+ /** A role inherits another role (casbin `g`, shared relation with assign_role). */
80
+ static roleInherits(opts: {
81
+ child: {
82
+ type: string;
83
+ id: IdType;
84
+ };
85
+ parent: {
86
+ type: string;
87
+ id: IdType;
88
+ };
89
+ }): {
90
+ variant: "role_inherits";
91
+ subjectType: string;
92
+ subjectId: IdType;
93
+ targetType: string;
94
+ targetId: IdType;
95
+ };
96
+ /**
97
+ * A resource inherits another (casbin `g4`): a grant on the PARENT covers the CHILD.
98
+ * e.g. `{ child: SaleOrder, parent: Sale }` — grant on module `Sale` covers subject `SaleOrder`.
99
+ * Many-to-many: a subject may inherit several module parents (add one edge each).
100
+ */
101
+ static resourceInherits(opts: {
102
+ child: {
103
+ type: string;
104
+ id: IdType;
105
+ };
106
+ parent: {
107
+ type: string;
108
+ id: IdType;
109
+ };
110
+ }): {
111
+ variant: "resource_inherits";
112
+ subjectType: string;
113
+ subjectId: IdType;
114
+ targetType: string;
115
+ targetId: IdType;
116
+ };
117
+ /** An action inherits another (casbin `g5`): the child action is implied by the parent, e.g. read ⊂ manage. */
118
+ static actionInherits(opts: {
119
+ child: TAuthorizationAction;
120
+ parent: TAuthorizationAction;
121
+ }): {
122
+ variant: "action_inherits";
123
+ subjectType: string;
124
+ subjectId: string;
125
+ targetType: string;
126
+ targetId: string;
127
+ };
128
+ /** All `action_inherits` rows for the standard {@link AuthorizationActions.LATTICE}. Seed once, idempotently. */
129
+ static actionLattice(): {
130
+ variant: "action_inherits";
131
+ subjectType: string;
132
+ subjectId: string;
133
+ targetType: string;
134
+ targetId: string;
135
+ }[];
136
+ /** A domain inherits another (casbin `g3`): a grant in the parent domain cascades to the child. e.g. Merchant ⊂ Organizer. */
137
+ static domainInherits(opts: {
138
+ child: {
139
+ type: string;
140
+ id: IdType;
141
+ };
142
+ parent: {
143
+ type: string;
144
+ id: IdType;
145
+ };
146
+ }): {
147
+ variant: "domain_inherits";
148
+ subjectType: string;
149
+ subjectId: IdType;
150
+ targetType: string;
151
+ targetId: IdType;
152
+ };
153
+ /**
154
+ * Build a role's coarse grant rows from resolved permission ids. The caller resolves each
155
+ * `resourceCode` (subject/module) to a `Permission` and supplies the lookup; unresolved codes are skipped.
156
+ */
157
+ static roleGrants(opts: {
158
+ role: {
159
+ type: string;
160
+ id: IdType;
161
+ };
162
+ permission: {
163
+ type: string;
164
+ idByCode: ReadonlyMap<string, string>;
165
+ };
166
+ grants: ReadonlyArray<{
167
+ resourceCode: string;
168
+ action: string;
169
+ domain?: TNullable<TPolicyDomainInput>;
170
+ effect: TAuthorizationDecision;
171
+ }>;
172
+ }): {
173
+ variant: "grant";
174
+ subjectType: string;
175
+ subjectId: IdType;
176
+ targetType: string;
177
+ targetId: IdType;
178
+ action: string;
179
+ effect: string;
180
+ domain: TNullable<string>;
181
+ }[];
182
+ }
183
+ //# sourceMappingURL=policy-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-builder.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/common/policy-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthorizationPolicyBuilder = void 0;
4
+ const constants_1 = require("./constants");
5
+ class AuthorizationPolicyBuilder {
6
+ static { this.ACTION_PRINCIPAL = 'Action'; }
7
+ /**
8
+ * Serialize a domain to the casbin token the matcher compares against {@link resolveRequestDomain}'s
9
+ * output: a scope literal (`SYSTEM_WIDE`/`ANY_MEMBER`) passes through unchanged; a typed domain becomes
10
+ * `<type>_<id>` so `g3(r.dom, p.dom)` cascades; null ⇒ null (the adapter then defaults grants to `ANY_MEMBER`).
11
+ */
12
+ static serializeDomain(domain) {
13
+ if (domain == null) {
14
+ return null;
15
+ }
16
+ if (typeof domain === 'string') {
17
+ return domain;
18
+ }
19
+ return [domain.type, domain.id].join('_');
20
+ }
21
+ /**
22
+ * A grant (casbin `p`): role/user → permission, carrying action + effect + domain.
23
+ * `domain` null ⇒ `ANY_MEMBER` (adapter default). Pass a scope literal or a typed `{ type, id }` domain.
24
+ */
25
+ static grant(opts) {
26
+ return {
27
+ variant: constants_1.AuthorizationPolicyVariants.GRANT.action,
28
+ subjectType: opts.subject.type,
29
+ subjectId: opts.subject.id,
30
+ targetType: opts.permission.type,
31
+ targetId: opts.permission.id,
32
+ action: opts.action,
33
+ effect: opts.effect,
34
+ domain: AuthorizationPolicyBuilder.serializeDomain(opts.domain),
35
+ };
36
+ }
37
+ /** Assign a role to a user (casbin `g`). `domain` null ⇒ `*` (every domain). */
38
+ static assignRole(opts) {
39
+ return {
40
+ variant: constants_1.AuthorizationPolicyVariants.ASSIGN_ROLE.action,
41
+ subjectType: opts.user.type,
42
+ subjectId: opts.user.id,
43
+ targetType: opts.role.type,
44
+ targetId: opts.role.id,
45
+ domain: AuthorizationPolicyBuilder.serializeDomain(opts.domain),
46
+ };
47
+ }
48
+ /** A user joins a domain (casbin `g2`) — backs the `ANY_MEMBER` grant scope. */
49
+ static joinDomain(opts) {
50
+ return {
51
+ variant: constants_1.AuthorizationPolicyVariants.JOIN_DOMAIN.action,
52
+ subjectType: opts.user.type,
53
+ subjectId: opts.user.id,
54
+ targetType: opts.domain.type,
55
+ targetId: opts.domain.id,
56
+ };
57
+ }
58
+ /** A role inherits another role (casbin `g`, shared relation with assign_role). */
59
+ static roleInherits(opts) {
60
+ return {
61
+ variant: constants_1.AuthorizationPolicyVariants.ROLE_INHERITS.action,
62
+ subjectType: opts.child.type,
63
+ subjectId: opts.child.id,
64
+ targetType: opts.parent.type,
65
+ targetId: opts.parent.id,
66
+ };
67
+ }
68
+ /**
69
+ * A resource inherits another (casbin `g4`): a grant on the PARENT covers the CHILD.
70
+ * e.g. `{ child: SaleOrder, parent: Sale }` — grant on module `Sale` covers subject `SaleOrder`.
71
+ * Many-to-many: a subject may inherit several module parents (add one edge each).
72
+ */
73
+ static resourceInherits(opts) {
74
+ return {
75
+ variant: constants_1.AuthorizationPolicyVariants.RESOURCE_INHERITS.action,
76
+ subjectType: opts.child.type,
77
+ subjectId: opts.child.id,
78
+ targetType: opts.parent.type,
79
+ targetId: opts.parent.id,
80
+ };
81
+ }
82
+ /** An action inherits another (casbin `g5`): the child action is implied by the parent, e.g. read ⊂ manage. */
83
+ static actionInherits(opts) {
84
+ return {
85
+ variant: constants_1.AuthorizationPolicyVariants.ACTION_INHERITS.action,
86
+ subjectType: this.ACTION_PRINCIPAL,
87
+ subjectId: opts.child,
88
+ targetType: this.ACTION_PRINCIPAL,
89
+ targetId: opts.parent,
90
+ };
91
+ }
92
+ /** All `action_inherits` rows for the standard {@link AuthorizationActions.LATTICE}. Seed once, idempotently. */
93
+ static actionLattice() {
94
+ return constants_1.AuthorizationActions.LATTICE.map(action => this.actionInherits(action));
95
+ }
96
+ /** A domain inherits another (casbin `g3`): a grant in the parent domain cascades to the child. e.g. Merchant ⊂ Organizer. */
97
+ static domainInherits(opts) {
98
+ return {
99
+ variant: constants_1.AuthorizationPolicyVariants.DOMAIN_INHERITS.action,
100
+ subjectType: opts.child.type,
101
+ subjectId: opts.child.id,
102
+ targetType: opts.parent.type,
103
+ targetId: opts.parent.id,
104
+ };
105
+ }
106
+ /**
107
+ * Build a role's coarse grant rows from resolved permission ids. The caller resolves each
108
+ * `resourceCode` (subject/module) to a `Permission` and supplies the lookup; unresolved codes are skipped.
109
+ */
110
+ static roleGrants(opts) {
111
+ const rows = [];
112
+ for (const grant of opts.grants) {
113
+ const permissionId = opts.permission.idByCode.get(grant.resourceCode);
114
+ if (!permissionId) {
115
+ continue;
116
+ }
117
+ const policy = AuthorizationPolicyBuilder.grant({
118
+ subject: { type: opts.role.type, id: opts.role.id },
119
+ permission: { type: opts.permission.type, id: permissionId },
120
+ action: grant.action,
121
+ domain: grant.domain,
122
+ effect: grant.effect,
123
+ });
124
+ rows.push(policy);
125
+ }
126
+ return rows;
127
+ }
128
+ }
129
+ exports.AuthorizationPolicyBuilder = AuthorizationPolicyBuilder;
130
+ //# sourceMappingURL=policy-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-builder.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/common/policy-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TContext } from '../../../../base/controllers/common/types';
2
+ import { TNullable } from '@venizia/ignis-helpers';
3
+ import { Env } from 'hono';
4
+ import { IAuthorizationDomainSource, IAuthorizationSpec, IAuthorizeOptions } from './types';
5
+ /** Read a domain value from a declarative source on the Hono context. */
6
+ export declare const readDeclarative: (opts: {
7
+ source: IAuthorizationDomainSource;
8
+ context: TContext<Env, string>;
9
+ }) => TNullable<string>;
10
+ /**
11
+ * Resolve the request domain scope with precedence:
12
+ * spec.domain (method | declarative) → options.domainResolver → SYSTEM_WIDE.
13
+ * Returns a casbin domain string ("<type>_<id>") or the SYSTEM_WIDE sentinel.
14
+ */
15
+ export declare const resolveRequestDomain: (opts: {
16
+ spec: IAuthorizationSpec;
17
+ context: TContext<Env, string>;
18
+ options: TNullable<IAuthorizeOptions>;
19
+ }) => Promise<string>;
20
+ //# sourceMappingURL=resolve-request-domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-request-domain.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/common/resolve-request-domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE3B,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5F,yEAAyE;AACzE,eAAO,MAAM,eAAe,GAAI,MAAM;IACpC,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;CAChC,KAAG,SAAS,CAAC,MAAM,CAoBnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAU,MAAM;IAC/C,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;CACvC,KAAG,OAAO,CAAC,MAAM,CA4BjB,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveRequestDomain = exports.readDeclarative = void 0;
4
+ const constants_1 = require("./constants");
5
+ /** Read a domain value from a declarative source on the Hono context. */
6
+ const readDeclarative = (opts) => {
7
+ const { source, context } = opts;
8
+ switch (source.from) {
9
+ case 'param': {
10
+ return context.req.param(source.key) ?? null;
11
+ }
12
+ case 'header': {
13
+ return context.req.header(source.key) ?? null;
14
+ }
15
+ case 'query': {
16
+ return context.req.query(source.key) ?? null;
17
+ }
18
+ case 'context': {
19
+ const value = context.get(source.key);
20
+ return value == null ? null : String(value);
21
+ }
22
+ default: {
23
+ return null;
24
+ }
25
+ }
26
+ };
27
+ exports.readDeclarative = readDeclarative;
28
+ /**
29
+ * Resolve the request domain scope with precedence:
30
+ * spec.domain (method | declarative) → options.domainResolver → SYSTEM_WIDE.
31
+ * Returns a casbin domain string ("<type>_<id>") or the SYSTEM_WIDE sentinel.
32
+ */
33
+ const resolveRequestDomain = async (opts) => {
34
+ const { spec, context, options } = opts;
35
+ // (1) spec.domain as a method
36
+ if (typeof spec.domain === 'function') {
37
+ const resolved = await spec.domain({ context });
38
+ return resolved
39
+ ? [resolved.type, resolved.id].join('_')
40
+ : constants_1.AuthorizationDomainScopes.SYSTEM_WIDE;
41
+ }
42
+ // (2) spec.domain as declarative
43
+ if (spec.domain) {
44
+ const id = (0, exports.readDeclarative)({ source: spec.domain, context });
45
+ return id ? [spec.domain.type, id].join('_') : constants_1.AuthorizationDomainScopes.SYSTEM_WIDE;
46
+ }
47
+ // (3) global resolver
48
+ const globalResolver = options?.domainResolver ?? null;
49
+ if (globalResolver) {
50
+ const resolved = await globalResolver({ context });
51
+ return resolved
52
+ ? [resolved.type, resolved.id].join('_')
53
+ : constants_1.AuthorizationDomainScopes.SYSTEM_WIDE;
54
+ }
55
+ // (4) nothing → SYSTEM_WIDE
56
+ return constants_1.AuthorizationDomainScopes.SYSTEM_WIDE;
57
+ };
58
+ exports.resolveRequestDomain = resolveRequestDomain;
59
+ //# sourceMappingURL=resolve-request-domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-request-domain.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/common/resolve-request-domain.ts"],"names":[],"mappings":";;;AAGA,2CAAwD;AAGxD,yEAAyE;AAClE,MAAM,eAAe,GAAG,CAAC,IAG/B,EAAqB,EAAE;IACtB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC/C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAChD,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC/C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAY,CAAC,CAAC;YAC/C,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAvBW,QAAA,eAAe,mBAuB1B;AAEF;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,KAAK,EAAE,IAI1C,EAAmB,EAAE;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAExC,8BAA8B;IAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO,QAAQ;YACb,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,qCAAyB,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,IAAA,uBAAe,EAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAyB,CAAC,WAAW,CAAC;IACvF,CAAC;IAED,sBAAsB;IACtB,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC;IACvD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,QAAQ;YACb,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,qCAAyB,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,4BAA4B;IAC5B,OAAO,qCAAyB,CAAC,WAAW,CAAC;AAC/C,CAAC,CAAC;AAhCW,QAAA,oBAAoB,wBAgC/B"}