@jantstack/adonis-authz 2.4.0-alpha.1 → 2.4.0-alpha.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.
- package/README.md +496 -29
- package/build/commands/authz_catalog_diff.d.ts.map +1 -1
- package/build/commands/authz_catalog_diff.js +0 -1
- package/build/commands/authz_catalog_diff.js.map +1 -1
- package/build/commands/authz_catalog_prune_orphans.d.ts.map +1 -1
- package/build/commands/authz_catalog_prune_orphans.js +0 -1
- package/build/commands/authz_catalog_prune_orphans.js.map +1 -1
- package/build/commands/authz_freeze.d.ts.map +1 -1
- package/build/commands/authz_freeze.js +1 -2
- package/build/commands/authz_freeze.js.map +1 -1
- package/build/commands/authz_reconcile.d.ts +15 -6
- package/build/commands/authz_reconcile.d.ts.map +1 -1
- package/build/commands/authz_reconcile.js +143 -20
- package/build/commands/authz_reconcile.js.map +1 -1
- package/build/commands/authz_relations_reconcile.d.ts +72 -1
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
- package/build/commands/authz_relations_reconcile.js +234 -21
- package/build/commands/authz_relations_reconcile.js.map +1 -1
- package/build/commands/authz_scopes_relay.d.ts +50 -0
- package/build/commands/authz_scopes_relay.d.ts.map +1 -1
- package/build/commands/authz_scopes_relay.js +213 -10
- package/build/commands/authz_scopes_relay.js.map +1 -1
- package/build/commands/authz_scopes_requeue.d.ts +80 -0
- package/build/commands/authz_scopes_requeue.d.ts.map +1 -0
- package/build/commands/authz_scopes_requeue.js +230 -0
- package/build/commands/authz_scopes_requeue.js.map +1 -0
- package/build/commands/authz_unfreeze.d.ts +12 -4
- package/build/commands/authz_unfreeze.d.ts.map +1 -1
- package/build/commands/authz_unfreeze.js +74 -9
- package/build/commands/authz_unfreeze.js.map +1 -1
- package/build/commands/main.d.ts +16 -13
- package/build/commands/main.d.ts.map +1 -1
- package/build/commands/main.js +59 -11
- package/build/commands/main.js.map +1 -1
- package/build/commands/openfga_provision.d.ts +49 -3
- package/build/commands/openfga_provision.d.ts.map +1 -1
- package/build/commands/openfga_provision.js +72 -7
- package/build/commands/openfga_provision.js.map +1 -1
- package/build/index.d.ts +15 -5
- package/build/index.d.ts.map +1 -1
- package/build/index.js +16 -3
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts +7 -2
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +20 -3
- package/build/providers/authz_provider.js.map +1 -1
- package/build/src/define_config.d.ts +106 -1
- package/build/src/define_config.d.ts.map +1 -1
- package/build/src/define_config.js +11 -0
- package/build/src/define_config.js.map +1 -1
- package/build/src/drivers/database_driver.d.ts +53 -14
- package/build/src/drivers/database_driver.d.ts.map +1 -1
- package/build/src/drivers/database_driver.js +104 -32
- package/build/src/drivers/database_driver.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +74 -9
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/database_relations_driver.js +391 -93
- package/build/src/drivers/database_relations_driver.js.map +1 -1
- package/build/src/drivers/openfga_driver.d.ts +71 -10
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +195 -16
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_facts.d.ts +15 -0
- package/build/src/drivers/openfga_facts.d.ts.map +1 -1
- package/build/src/drivers/openfga_facts.js +25 -2
- package/build/src/drivers/openfga_facts.js.map +1 -1
- package/build/src/drivers/openfga_relations_driver.d.ts +72 -6
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_relations_driver.js +308 -50
- package/build/src/drivers/openfga_relations_driver.js.map +1 -1
- package/build/src/errors.d.ts +175 -4
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +219 -3
- package/build/src/errors.js.map +1 -1
- package/build/src/freeze.d.ts +100 -20
- package/build/src/freeze.d.ts.map +1 -1
- package/build/src/freeze.js +159 -25
- package/build/src/freeze.js.map +1 -1
- package/build/src/manager.d.ts +239 -7
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +1192 -148
- package/build/src/manager.js.map +1 -1
- package/build/src/models/authz_assignment.d.ts +2 -2
- package/build/src/models/authz_assignment.d.ts.map +1 -1
- package/build/src/models/authz_deny.d.ts +2 -2
- package/build/src/models/authz_deny.d.ts.map +1 -1
- package/build/src/models/authz_permission.d.ts +2 -2
- package/build/src/models/authz_permission.d.ts.map +1 -1
- package/build/src/models/authz_role.d.ts +2 -2
- package/build/src/models/authz_role.d.ts.map +1 -1
- package/build/src/models/authz_role_permission.d.ts +2 -2
- package/build/src/models/authz_role_permission.d.ts.map +1 -1
- package/build/src/relation_partition_trigger.d.ts.map +1 -1
- package/build/src/relation_partition_trigger.js +11 -3
- package/build/src/relation_partition_trigger.js.map +1 -1
- package/build/src/relations/define_relations_config.d.ts +51 -0
- package/build/src/relations/define_relations_config.d.ts.map +1 -1
- package/build/src/relations/define_relations_config.js +68 -1
- package/build/src/relations/define_relations_config.js.map +1 -1
- package/build/src/relations/manager.d.ts +106 -6
- package/build/src/relations/manager.d.ts.map +1 -1
- package/build/src/relations/manager.js +368 -30
- package/build/src/relations/manager.js.map +1 -1
- package/build/src/relations/reconcile.d.ts +81 -6
- package/build/src/relations/reconcile.d.ts.map +1 -1
- package/build/src/relations/reconcile.js +233 -77
- package/build/src/relations/reconcile.js.map +1 -1
- package/build/src/scope_outbox.d.ts +54 -0
- package/build/src/scope_outbox.d.ts.map +1 -1
- package/build/src/scope_outbox.js +274 -33
- package/build/src/scope_outbox.js.map +1 -1
- package/build/src/shared/backend_guard.d.ts +28 -0
- package/build/src/shared/backend_guard.d.ts.map +1 -1
- package/build/src/shared/backend_guard.js +52 -0
- package/build/src/shared/backend_guard.js.map +1 -1
- package/build/src/shared/sql_expiry.d.ts +2 -0
- package/build/src/shared/sql_expiry.d.ts.map +1 -1
- package/build/src/shared/sql_expiry.js +4 -0
- package/build/src/shared/sql_expiry.js.map +1 -1
- package/build/src/shared/transaction_guard.d.ts +53 -0
- package/build/src/shared/transaction_guard.d.ts.map +1 -0
- package/build/src/shared/transaction_guard.js +74 -0
- package/build/src/shared/transaction_guard.js.map +1 -0
- package/build/src/sql_descendants.d.ts +8 -0
- package/build/src/sql_descendants.d.ts.map +1 -1
- package/build/src/sql_descendants.js.map +1 -1
- package/build/src/testing/contract.d.ts +55 -4
- package/build/src/testing/contract.d.ts.map +1 -1
- package/build/src/testing/contract.js +244 -9
- package/build/src/testing/contract.js.map +1 -1
- package/build/src/testing/main.d.ts +6 -4
- package/build/src/testing/main.d.ts.map +1 -1
- package/build/src/testing/main.js +3 -2
- package/build/src/testing/main.js.map +1 -1
- package/build/src/testing/migration_contract.d.ts +9 -0
- package/build/src/testing/migration_contract.d.ts.map +1 -1
- package/build/src/testing/migration_contract.js +5 -2
- package/build/src/testing/migration_contract.js.map +1 -1
- package/build/src/testing/relations_contract.d.ts +23 -1
- package/build/src/testing/relations_contract.d.ts.map +1 -1
- package/build/src/testing/relations_contract.js +603 -19
- package/build/src/testing/relations_contract.js.map +1 -1
- package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -1
- package/build/src/testing/relations_reconcile_contract.js +49 -1
- package/build/src/testing/relations_reconcile_contract.js.map +1 -1
- package/build/src/testing/scope_outbox_contract.d.ts +98 -0
- package/build/src/testing/scope_outbox_contract.d.ts.map +1 -0
- package/build/src/testing/scope_outbox_contract.js +677 -0
- package/build/src/testing/scope_outbox_contract.js.map +1 -0
- package/build/src/traits/has_uuid.d.ts +2 -2
- package/build/src/traits/has_uuid.d.ts.map +1 -1
- package/build/src/types.d.ts +708 -38
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js +55 -0
- package/build/src/types.js.map +1 -1
- package/build/stubs/config/authorization.stub +45 -1
- package/build/stubs/migration.stub +20 -10
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Entrada pública del paquete.
|
|
3
3
|
* import { AuthorizationManager, APP_SCOPE } from '@jantstack/adonis-authz'
|
|
4
4
|
*/
|
|
5
|
-
export { AuthorizationManager, DEFAULT_MAX_SCOPES, DEFAULT_MAX_DESCENDANTS, MAX_SCOPE_BOUND, DEFAULT_VIEW_MAX_AGE_MS, expandExcludedSubtrees } from './src/manager.js';
|
|
5
|
+
export { AuthorizationManager, DEFAULT_MAX_SCOPES, DEFAULT_MAX_DESCENDANTS, MAX_SCOPE_BOUND, DEFAULT_VIEW_MAX_AGE_MS, PARKED_CENSUS_MAX, RELAY_ORIGIN_MAX_HOPS, RELAY_LEASE_POLL_MS, expandExcludedSubtrees } from './src/manager.js';
|
|
6
6
|
export { defineConfig } from './src/define_config.js';
|
|
7
7
|
export { syncAuthzCatalog, diffAuthzCatalog, catalogInSync, formatCatalogDiff, formatScopedRoles, formatShadowedRoles, runCatalogDiff, syncCatalogs, } from './src/catalog/catalog.js';
|
|
8
8
|
/**
|
|
@@ -43,7 +43,11 @@ export { sqlScopeOutbox } from './src/scope_outbox.js';
|
|
|
43
43
|
* obligaría a importar ese SDK — acoplando el call-site al backend que este
|
|
44
44
|
* paquete existe para abstraer.
|
|
45
45
|
*/
|
|
46
|
-
export { AuthorizationBackendError, AuthorizationBackendTimeoutError, ScopeResolverError, InvalidIdentityError, InvalidSlugError, AuthorizationConfigError, AuthorizationInternalError, UnknownScopeError, NoScopeResolverError, UnknownRoleError, UnknownPermissionError, CatalogConflictError, RoleIsNotAccessError, ScopeCycleError, PurgeIncompleteError, WriteConflictError, ActorRequiredError, NotWithinError, WithinRequiredError, WithinRootForbiddenError, TooManyScopesError, TooManyLocalRolesError, MassPurgeRefusedError, PruneInterruptedError, UnsupportedDialectError, ScopeTooDeepError, UnsupportedOperationError, NoDescendantsResolverError, ViewExpiredError, RoleNotVisibleError, AmbiguousRoleError, RoleImmutableError, RoleLevelAboveOwnerError, RoleNotAssignableAtError, PermissionNotDelegableError, RankExceededError, ModelTooLargeError, RelationConfigError, RelationTypeUnknownError, RelationUnknownError, ScopeTreeDriftError, ScopeDriftUnguardedError, AuthorizationFrozenError, FreezeHeldError, MassReconcileRefusedError,
|
|
46
|
+
export { AuthorizationBackendError, AuthorizationBackendTimeoutError, ScopeResolverError, InvalidIdentityError, InvalidSlugError, AuthorizationConfigError, AuthorizationInternalError, UnknownScopeError, NoScopeResolverError, UnknownRoleError, UnknownPermissionError, CatalogConflictError, RoleIsNotAccessError, ScopeCycleError, PurgeIncompleteError, WriteConflictError, ActorRequiredError, NotWithinError, WithinRequiredError, WithinRootForbiddenError, TooManyScopesError, TooManyLocalRolesError, MassPurgeRefusedError, PruneInterruptedError, UnsupportedDialectError, ScopeTooDeepError, ScopeDepthLimitError, ScopeRequeueRefusedError, UnsupportedOperationError, NoDescendantsResolverError, ViewExpiredError, RoleNotVisibleError, AmbiguousRoleError, RoleImmutableError, RoleLevelAboveOwnerError, RoleNotAssignableAtError, PermissionNotDelegableError, RankExceededError, ModelTooLargeError, RelationConfigError, RelationTypeUnknownError, RelationUnknownError, ScopeTreeDriftError, ScopeDriftUnguardedError, AuthorizationFrozenError, FreezeHeldError, MassReconcileRefusedError, StaleSourceRefusedError, OperatorWindowExpiredError, ReconcileTooLargeError,
|
|
47
|
+
// Cierre de alpha.3 (invariante 13 en purgas multi-request): un driver de
|
|
48
|
+
// relaciones de terceros marca con `markPartialWrite` el fallo que llega
|
|
49
|
+
// DESPUÉS de haber borrado parte; el manager notifica `indeterminate: true`.
|
|
50
|
+
markPartialWrite, isPartialWrite, } from './src/errors.js';
|
|
47
51
|
/**
|
|
48
52
|
* Validación de identidad y de slugs (422). La aplica el manager en cada
|
|
49
53
|
* llamada y los drivers por defensa en profundidad; se exporta para que un
|
|
@@ -59,7 +63,6 @@ export { assertIdentity, assertSubject, assertScope, assertValidSlug, assertExpi
|
|
|
59
63
|
*/
|
|
60
64
|
export { defineRelationsConfig } from './src/relations/define_relations_config.js';
|
|
61
65
|
export { RelationsManager } from './src/relations/manager.js';
|
|
62
|
-
export { reconcileRelations } from './src/relations/reconcile.js';
|
|
63
66
|
// La config de relaciones PERSISTIDA (🟡3): API de PLATAFORMA (bajo el gate de
|
|
64
67
|
// versión, invariante 14). La CONSUME `authz:relations:reconcile` (config del
|
|
65
68
|
// destino, para la deriva del modelo fusionado en --dry-run).
|
|
@@ -77,6 +80,16 @@ export { DatabaseAuthorizationDriver, APP_SCOPE_DB_UUID } from './src/drivers/da
|
|
|
77
80
|
*/
|
|
78
81
|
export { APP_SCOPE, APP_SCOPE_TYPE, DEFAULT_RECONCILE_MAX_TUPLES } from './src/types.js';
|
|
79
82
|
export { isRelUserset } from './src/types.js';
|
|
83
|
+
/**
|
|
84
|
+
* **¿De quién es esta transacción?** (L-1 · 🟠 9, regla del puerto `{trx}`):
|
|
85
|
+
* la ÚNICA comprobación con la que una escritura del paquete —la outbox de
|
|
86
|
+
* `scopes.*` hoy; `grant`/`relate` de un driver con `transactionalWrites:
|
|
87
|
+
* true`— se inscribe en `{ transaction }`: tiene que ser una transacción
|
|
88
|
+
* ABIERTA de Lucid de la conexión de quien escribe (otra conexión, un
|
|
89
|
+
* `QueryClient` o el `db` entero son 500 `E_AUTHZ_CONFIG`). Un driver de
|
|
90
|
+
* terceros que declare `transactionalWrites: true` la llama con SU conexión.
|
|
91
|
+
*/
|
|
92
|
+
export { assertCallerTransaction } from './src/shared/transaction_guard.js';
|
|
80
93
|
export { default as AuthzRole } from './src/models/authz_role.js';
|
|
81
94
|
export { default as AuthzPermission } from './src/models/authz_permission.js';
|
|
82
95
|
export { default as AuthzRolePermission } from './src/models/authz_role_permission.js';
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ApplicationService } from '@adonisjs/core/types';
|
|
2
2
|
import { AuthorizationManager } from '../src/manager.js';
|
|
3
3
|
import { RelationsManager } from '../src/relations/manager.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type AuthorizationConfig } from '../src/define_config.js';
|
|
5
5
|
declare module '@adonisjs/core/types' {
|
|
6
6
|
interface ContainerBindings {
|
|
7
7
|
'authz.manager': AuthorizationManager;
|
|
@@ -18,7 +18,12 @@ declare module '@adonisjs/core/types' {
|
|
|
18
18
|
* (los drivers de relaciones se nombran igual que los de roles); la config, de
|
|
19
19
|
* `relations.config` (la MISMA que capturan las factories de `drivers`, así que
|
|
20
20
|
* la frontera F-05 del manager y la del driver son la misma). `requireActor` se
|
|
21
|
-
* hereda del config de roles
|
|
21
|
+
* hereda del config de roles salvo que `relations.requireActor` lo anule para
|
|
22
|
+
* este puerto (2.4.0-alpha.3 · D-5, el mismo patrón que
|
|
23
|
+
* `requireTransactionalWrites`), y los hooks del puerto —`relations.assertWrite`
|
|
24
|
+
* y `relations.onRelationWrite`, un solo home (D-4)— llegan al manager: hasta
|
|
25
|
+
* alpha.3 no se pasaban y por `authz.relations` no había ni gate de policy ni
|
|
26
|
+
* auditoría (hallazgo #1 de COGNITIV).
|
|
22
27
|
*
|
|
23
28
|
* Sin `relations.config` o sin el driver activo lanza con la receta: las
|
|
24
29
|
* relaciones son OPT-IN y este servicio solo existe si el consumidor las
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_provider.d.ts","sourceRoot":"","sources":["../../providers/authz_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"authz_provider.d.ts","sourceRoot":"","sources":["../../providers/authz_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE5F,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAiB,iBAAiB;QAChC,eAAe,EAAE,oBAAoB,CAAA;QACrC,iBAAiB,EAAE,gBAAgB,CAAA;KACpC;CACF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgClG;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACpB,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,QAAQ;CAqBT"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AuthorizationManager } from '../src/manager.js';
|
|
2
2
|
import { RelationsManager } from '../src/relations/manager.js';
|
|
3
|
+
import { activeRelationsDriverKey } from '../src/define_config.js';
|
|
3
4
|
/**
|
|
4
5
|
* **Construye el `RelationsManager` de servicio desde el config** (Fase 4-8) —
|
|
5
6
|
* el análogo de resolver el `AuthorizationManager` del provider, pero para el
|
|
@@ -10,7 +11,12 @@ import { RelationsManager } from '../src/relations/manager.js';
|
|
|
10
11
|
* (los drivers de relaciones se nombran igual que los de roles); la config, de
|
|
11
12
|
* `relations.config` (la MISMA que capturan las factories de `drivers`, así que
|
|
12
13
|
* la frontera F-05 del manager y la del driver son la misma). `requireActor` se
|
|
13
|
-
* hereda del config de roles
|
|
14
|
+
* hereda del config de roles salvo que `relations.requireActor` lo anule para
|
|
15
|
+
* este puerto (2.4.0-alpha.3 · D-5, el mismo patrón que
|
|
16
|
+
* `requireTransactionalWrites`), y los hooks del puerto —`relations.assertWrite`
|
|
17
|
+
* y `relations.onRelationWrite`, un solo home (D-4)— llegan al manager: hasta
|
|
18
|
+
* alpha.3 no se pasaban y por `authz.relations` no había ni gate de policy ni
|
|
19
|
+
* auditoría (hallazgo #1 de COGNITIV).
|
|
14
20
|
*
|
|
15
21
|
* Sin `relations.config` o sin el driver activo lanza con la receta: las
|
|
16
22
|
* relaciones son OPT-IN y este servicio solo existe si el consumidor las
|
|
@@ -23,7 +29,7 @@ export async function buildRelationsManager(config) {
|
|
|
23
29
|
'defineRelationsConfig({...}), drivers: {...} }` para usar el servicio de relaciones ' +
|
|
24
30
|
'(@jantstack/adonis-authz/services/relations).');
|
|
25
31
|
}
|
|
26
|
-
const driverKey =
|
|
32
|
+
const driverKey = activeRelationsDriverKey(config);
|
|
27
33
|
const factory = relations.drivers?.[driverKey];
|
|
28
34
|
if (!factory) {
|
|
29
35
|
throw new Error(`No hay driver de relaciones '${driverKey}' en \`relations.drivers\` de config/authorization.ts ` +
|
|
@@ -31,7 +37,18 @@ export async function buildRelationsManager(config) {
|
|
|
31
37
|
}
|
|
32
38
|
const driver = await factory();
|
|
33
39
|
return new RelationsManager(driver, relations.config, {
|
|
34
|
-
|
|
40
|
+
// alpha.3 · D-5: el flag de relaciones manda; si no está, el del raíz (`??`, no `||`: el `false` explícito anula).
|
|
41
|
+
requireActor: relations.requireActor ?? config.requireActor,
|
|
42
|
+
// alpha.3 · D-4: los hooks del puerto, desde su único home (`relations.*`); `?.` — sin default ruidoso.
|
|
43
|
+
assertWrite: relations.assertWrite,
|
|
44
|
+
onRelationWrite: relations.onRelationWrite,
|
|
45
|
+
// R-15: el MISMO reloj que el motor de roles (`config.clock`, 2.5 · J1).
|
|
46
|
+
clock: config.clock,
|
|
47
|
+
// L-1 · J1: la MISMA barrera del freeze (y su deadline) que el motor de roles.
|
|
48
|
+
freezeTimeoutMs: config.freezeTimeoutMs,
|
|
49
|
+
// L-2 · puerta 2: el flag de relaciones manda; si no está, el del raíz.
|
|
50
|
+
requireTransactionalWrites: relations.requireTransactionalWrites ?? config.requireTransactionalWrites,
|
|
51
|
+
driverName: driverKey,
|
|
35
52
|
});
|
|
36
53
|
}
|
|
37
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_provider.js","sourceRoot":"","sources":["../../providers/authz_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"authz_provider.js","sourceRoot":"","sources":["../../providers/authz_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAA4B,MAAM,yBAAyB,CAAA;AAS5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAA2B;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IAClC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,sFAAsF;YACpF,sFAAsF;YACtF,+CAA+C,CAClD,CAAA;IACH,CAAC;IACD,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,gCAAgC,SAAS,wDAAwD;YAC/F,oEAAoE,CACvE,CAAA;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;IAC9B,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE;QACpD,mHAAmH;QACnH,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;QAC3D,wGAAwG;QACxG,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,yEAAyE;QACzE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,+EAA+E;QAC/E,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,wEAAwE;QACxE,0BAA0B,EAAE,SAAS,CAAC,0BAA0B,IAAI,MAAM,CAAC,0BAA0B;QACrG,UAAU,EAAE,SAAS;KACtB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACV;IAAtB,YAAsB,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAEjD,QAAQ;QACN,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAQ,CAAA;YAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAA;YACH,CAAC;YACD,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAQ,CAAA;YAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAA;YACH,CAAC;YACD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AuthorizationDriverFactory, AuthzCatalogWriteEvent, AuthzWriteEvent, HolderTypeMap, RelationsDriverFactory, ScopeChainResolver, ScopeDescendantsResolver, ScopeEdgesEnumerator, ScopeOutbox } from './types.js';
|
|
1
|
+
import type { AuthorizationDriverFactory, AuthzCatalogWriteEvent, AuthzWriteEvent, HolderTypeMap, RelationRef, RelationWriteEvent, RelationsDriverFactory, ScopeChainResolver, ScopeDescendantsResolver, ScopeEdgesEnumerator, ScopeOutbox } from './types.js';
|
|
2
2
|
import type { CatalogSource } from './catalog/catalog.js';
|
|
3
3
|
import type { RelationsConfig } from './relations/define_relations_config.js';
|
|
4
4
|
/**
|
|
@@ -92,6 +92,30 @@ export interface AuthorizationConfig {
|
|
|
92
92
|
* hacen, 2.5-B · ⚪6).
|
|
93
93
|
*/
|
|
94
94
|
maxDescendants?: number;
|
|
95
|
+
/**
|
|
96
|
+
* **Techo de profundidad del árbol, opt-in** (2.4.0-alpha.5 · R0; panel
|
|
97
|
+
* relay, cuestión 5). Profundidad = saltos `parent` hasta `app`. Con la
|
|
98
|
+
* opción, `scopes.attached`/`scopes.moved` rechazan con 422
|
|
99
|
+
* `E_AUTHZ_SCOPE_DEPTH_LIMIT` un hijo que quedaría a más de `maxDepth`
|
|
100
|
+
* saltos —la cadena del padre + 1— ANTES de escribir o encolar, y con
|
|
101
|
+
* cero I/O de más (la cadena del padre ya se resuelve para el anti-ciclo).
|
|
102
|
+
* Sin la opción no existe: `database` no tiene techo y no paga nada.
|
|
103
|
+
*
|
|
104
|
+
* Para qué: el modelo `facts` de `openfga` resuelve de forma fiable hasta
|
|
105
|
+
* `FACTS_MAX_RESOLVE_DEPTH` (22) saltos y más allá responde 503 —un DoS
|
|
106
|
+
* al alcance de quien pueda anidar sub-scopes— y además cada `attached`
|
|
107
|
+
* del relay cuesta ∝ la profundidad del vecino (medido: ×5,8 de 1 a 34).
|
|
108
|
+
* Declararlo aquí (y no como capacidad del driver, que es booleana por
|
|
109
|
+
* doctrina) es lo que hace que el árbol no crezca hasta donde su PDP no
|
|
110
|
+
* decide. Es el MISMO mando que usa `authz:reconcile` para reportar como
|
|
111
|
+
* deriva las cadenas que lo superan (`drift.tooDeep`).
|
|
112
|
+
*
|
|
113
|
+
* **PARCIAL, a propósito**: mira el DESTINO del hijo, no la altura del
|
|
114
|
+
* subárbol que se mueve —un `moved` de un subárbol de altura h deja sus
|
|
115
|
+
* hojas a `chain + h`—; medir eso exige `descendantsOf` en el camino de
|
|
116
|
+
* escritura, que está prohibido. Entero ≥ 1 (500 `E_AUTHZ_CONFIG` si no).
|
|
117
|
+
*/
|
|
118
|
+
maxDepth?: number;
|
|
95
119
|
/**
|
|
96
120
|
* **La outbox del árbol** (3b-2d, panel 2 cruce 4 · S5). Con ella,
|
|
97
121
|
* `manager.scopes.attached/moved/detached` NO escriben en el backend:
|
|
@@ -145,6 +169,19 @@ export interface AuthorizationConfig {
|
|
|
145
169
|
* NO es el reloj monótono de `forRequest({ maxAgeMs })`.
|
|
146
170
|
*/
|
|
147
171
|
clock?: () => Date;
|
|
172
|
+
/**
|
|
173
|
+
* Deadline TOTAL (ms, default 5000) de la lectura de la **barrera del
|
|
174
|
+
* freeze** que precede a toda escritura (fila `id = 2` de
|
|
175
|
+
* `authz_catalog_version`, 2.3). La barrera se lee SIEMPRE por la conexión
|
|
176
|
+
* del motor, nunca por la transacción del llamante (L-1 · 🟠 8: la
|
|
177
|
+
* autoridad no comparte snapshot con quien escribe), así que
|
|
178
|
+
* `{ transaction }` en `scopes.*` exige **pool ≥ 2**: con pool 1 (SQLite
|
|
179
|
+
* `:memory:`) la barrera no consigue conexión mientras el llamante sostiene
|
|
180
|
+
* la suya y la escritura sale 503 `E_AUTHZ_BACKEND_TIMEOUT` al vencer este
|
|
181
|
+
* deadline — fail-closed, jamás un cuelgue ni un bypass. El mismo valor lo
|
|
182
|
+
* hereda el `RelationsManager` del provider.
|
|
183
|
+
*/
|
|
184
|
+
freezeTimeoutMs?: number;
|
|
148
185
|
/**
|
|
149
186
|
* Toda escritura (`grant`, `revoke`, `deny`, `removeDeny`, `scopes.*`)
|
|
150
187
|
* tiene que llevar `actor` (2.1, B7); sin él, 422 `E_AUTHZ_ACTOR_REQUIRED`
|
|
@@ -152,6 +189,20 @@ export interface AuthorizationConfig {
|
|
|
152
189
|
* al construirse (ver `warnOnOptInSecurity`).
|
|
153
190
|
*/
|
|
154
191
|
requireActor?: boolean;
|
|
192
|
+
/**
|
|
193
|
+
* **Puerta 2 de `{ transaction }`** (L-2, opt-in): con `true`, el driver
|
|
194
|
+
* ACTIVO tiene que declarar `capabilities.transactionalWrites: true` o el
|
|
195
|
+
* manager falla **al resolverlo** (500 `E_AUTHZ_CONFIG`) — toda lectura y
|
|
196
|
+
* escritura, `manager.driver()` incluido: el despliegue no arranca. Es lo
|
|
197
|
+
* que convierte «`{ transaction }` a un driver `openfga` es 500 por
|
|
198
|
+
* llamada» (puerta 1, siempre activa) en un fallo en toda la flota en vez
|
|
199
|
+
* de en una ruta poco transitada. Default `false`: el roadmap decía «el
|
|
200
|
+
* manager falla al construirse si el driver no la soporta» y eso haría
|
|
201
|
+
* `openfga` inconstruible en cualquier app que solo lo tenga registrado;
|
|
202
|
+
* quien quiera fallar al arrancar, lo pide. Lo hereda el `RelationsManager`
|
|
203
|
+
* del provider salvo `relations.requireTransactionalWrites`.
|
|
204
|
+
*/
|
|
205
|
+
requireTransactionalWrites?: boolean;
|
|
155
206
|
/**
|
|
156
207
|
* Las SEIS escrituras (`grant`, `revoke`, `deny`, `removeDeny`,
|
|
157
208
|
* `scopes.attached/moved/detached`) tienen que declarar `within` (2.1, B1;
|
|
@@ -228,6 +279,51 @@ export interface AuthorizationConfig {
|
|
|
228
279
|
*/
|
|
229
280
|
default?: string;
|
|
230
281
|
drivers?: Record<string, RelationsDriverFactory>;
|
|
282
|
+
/**
|
|
283
|
+
* La puerta 2 de `{ transaction }` para el puerto de RELACIONES (L-2):
|
|
284
|
+
* con `true`, el driver de relaciones activo tiene que declarar
|
|
285
|
+
* `transactionalWrites: true` o `buildRelationsManager` falla al
|
|
286
|
+
* resolverlo (500 `E_AUTHZ_CONFIG`). Default: el
|
|
287
|
+
* `requireTransactionalWrites` del raíz (una sola política, como
|
|
288
|
+
* `requireActor`); `false` aquí lo anula solo para este puerto.
|
|
289
|
+
*/
|
|
290
|
+
requireTransactionalWrites?: boolean;
|
|
291
|
+
/**
|
|
292
|
+
* **Gate de policy del consumidor sobre cada tupla (R-13)** — cableado al
|
|
293
|
+
* `RelationsManager` de servicio desde 2.4.0-alpha.3 (hasta entonces solo
|
|
294
|
+
* existía construyendo el manager a mano). SÍNCRONO, PURO y sin `actor` a
|
|
295
|
+
* propósito: recibe la referencia completa (sujeto, relación, objeto,
|
|
296
|
+
* partición, operación, `expiresAt`) y LANZA para rechazarla; corre
|
|
297
|
+
* después de F-05 y ANTES de tocar el driver (cero llamadas, cero
|
|
298
|
+
* eventos). **Devolver una promesa es 500 `E_AUTHZ_CONFIG`** antes de
|
|
299
|
+
* escribir, no un rechazo ignorado: un `assertWrite: async (ref) => …`
|
|
300
|
+
* compila (una función que devuelve `Promise<void>` es asignable a
|
|
301
|
+
* `void`) y hasta alpha.3 la promesa se descartaba y la escritura
|
|
302
|
+
* ENTRABA. La policy que necesita actor, BD o `await` va en tu servicio,
|
|
303
|
+
* antes de llamar a `relate`/`unrelate`. Las purgas no pasan por aquí.
|
|
304
|
+
* Vive en `relations` y no en `hooks`: un solo home para el puerto.
|
|
305
|
+
*/
|
|
306
|
+
assertWrite?: (ref: RelationRef) => void;
|
|
307
|
+
/**
|
|
308
|
+
* **Auditoría de las CUATRO escrituras de relaciones** (`relate`,
|
|
309
|
+
* `unrelate`, `purgeObject`, `purgeSubject`) por el servicio
|
|
310
|
+
* `authz.relations`, con las MISMAS garantías que `hooks.onWrite`
|
|
311
|
+
* (2.4.0-alpha.3): se llama cuando el driver vuelve, con el `actor` ya
|
|
312
|
+
* validado; si lanza (sync o async) se registra y NO tumba la escritura
|
|
313
|
+
* ya aplicada; con `{ transaction }` el evento lleva `transactional:
|
|
314
|
+
* true`; y una escritura que vence el deadline notifica `indeterminate:
|
|
315
|
+
* true` ANTES de propagar el 503 (invariante 13). Ver `RelationWriteEvent`.
|
|
316
|
+
*/
|
|
317
|
+
onRelationWrite?: (event: RelationWriteEvent) => void | Promise<void>;
|
|
318
|
+
/**
|
|
319
|
+
* `actor` obligatorio en las CUATRO escrituras de relaciones — purgas
|
|
320
|
+
* incluidas desde 2.4.0-alpha.3 — solo para este puerto. Default: el
|
|
321
|
+
* `requireActor` del raíz (`relations.requireActor ?? requireActor`, el
|
|
322
|
+
* MISMO patrón que `requireTransactionalWrites`): sin declararlo se
|
|
323
|
+
* hereda; `true` aquí lo exige aunque el raíz no; `false` aquí lo anula
|
|
324
|
+
* aunque el raíz lo exija (el opt-out explícito por puerto).
|
|
325
|
+
*/
|
|
326
|
+
requireActor?: boolean;
|
|
231
327
|
};
|
|
232
328
|
/**
|
|
233
329
|
* Hooks del consumidor. `onWrite` se llama tras cada escritura del motor
|
|
@@ -243,5 +339,14 @@ export interface AuthorizationConfig {
|
|
|
243
339
|
onCatalogWrite?: (event: AuthzCatalogWriteEvent) => Promise<void>;
|
|
244
340
|
};
|
|
245
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* **La clave del driver de RELACIONES activo** (2.4.0-alpha.10): `relations.default`
|
|
344
|
+
* y, si falta, el `default` de roles — las relaciones cambian de driver con él.
|
|
345
|
+
* UN solo sitio para esta regla: la usan el provider (qué driver sirve
|
|
346
|
+
* `services/relations`) y el guard de la dirección rancia de
|
|
347
|
+
* `authz:relations:reconcile` (qué destino es el activo). Dos copias eran dos
|
|
348
|
+
* respuestas.
|
|
349
|
+
*/
|
|
350
|
+
export declare function activeRelationsDriverKey(config: Pick<AuthorizationConfig, 'default' | 'relations'>): string;
|
|
246
351
|
export declare function defineConfig<T extends AuthorizationConfig>(config: T): T;
|
|
247
352
|
//# sourceMappingURL=define_config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,WAAW,EACZ,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAE7E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAA;IAEnD;;;;OAIG;IACH,WAAW,CAAC,EAAE,aAAa,CAAA;IAE3B;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,uCAAuC;QACvC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE;QACP,YAAY,EAAE,kBAAkB,CAAA;QAChC;;;;;WAKG;QACH,aAAa,CAAC,EAAE,wBAAwB,CAAA;QACxC;;;;;;;;;;;;;;;;;WAiBG;QACH,cAAc,CAAC,EAAE,oBAAoB,CAAA;QACrC;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB;;;;;;WAMG;QACH,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB;;;;;;;;;;;;;;;;;;;;;WAqBG;QACH,MAAM,CAAC,EAAE,WAAW,CAAA;QACpB;;;;;;;WAOG;QACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;KAC/B,CAAA;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAE1B;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAElB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;IAEpC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,SAAS,CAAC,EAAE;QACV;;;;;;WAMG;QACH,MAAM,CAAC,EAAE,eAAe,CAAA;QACxB;;;;WAIG;QACH,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **La clave del driver de RELACIONES activo** (2.4.0-alpha.10): `relations.default`
|
|
3
|
+
* y, si falta, el `default` de roles — las relaciones cambian de driver con él.
|
|
4
|
+
* UN solo sitio para esta regla: la usan el provider (qué driver sirve
|
|
5
|
+
* `services/relations`) y el guard de la dirección rancia de
|
|
6
|
+
* `authz:relations:reconcile` (qué destino es el activo). Dos copias eran dos
|
|
7
|
+
* respuestas.
|
|
8
|
+
*/
|
|
9
|
+
export function activeRelationsDriverKey(config) {
|
|
10
|
+
return config.relations?.default ?? config.default;
|
|
11
|
+
}
|
|
1
12
|
export function defineConfig(config) {
|
|
2
13
|
return config;
|
|
3
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AAgXA;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAA0D;IACjG,OAAO,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAgC,MAAS;IACnE,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import db from '@adonisjs/lucid/services/db';
|
|
2
|
-
import type { AuthorizationDriver, CatalogRoleRef, DenyRef, GrantOptions, GrantOutcome, NormalizedRoleQuery, ReconcileOptions, ReconcileReport, ReconcileSource, RoleQuery, ScopeRef, ScopeType, SubjectRef } from '../types.js';
|
|
2
|
+
import type { AuthorizationDriver, AuthorizationDriverCapabilities, CatalogRoleRef, DenyRef, GrantOptions, GrantOutcome, NormalizedRoleQuery, ReconcileOptions, ReconcileReport, ReconcileSource, RoleQuery, ScopeRef, ScopeType, SubjectRef, WriteOptions } from '../types.js';
|
|
3
3
|
import type { ScopeChainResolver } from '../types.js';
|
|
4
4
|
import { CatalogCache } from '../catalog/catalog_cache.js';
|
|
5
5
|
import type { CatalogRevalidate, CatalogRole, CatalogView } from '../catalog/catalog_cache.js';
|
|
@@ -109,6 +109,21 @@ export interface DatabaseDriverOptions {
|
|
|
109
109
|
* request autorizada en un socket retenido para siempre (L0.13).
|
|
110
110
|
*/
|
|
111
111
|
timeoutMs?: number;
|
|
112
|
+
/**
|
|
113
|
+
* Lo que este despliegue DECLARA sobre `{ transaction }` (L-3, panel
|
|
114
|
+
* `{trx}`). Default `true`: `grant`/`revoke`/`deny`/`removeDeny` escriben
|
|
115
|
+
* dentro de la transacción ABIERTA del llamante (`TransactionClientContract`
|
|
116
|
+
* de la conexión primaria de Lucid, `assertCallerTransaction`), «los dos o
|
|
117
|
+
* ninguno». Eso **exige pool ≥ 2**: la autoridad (barrera del freeze,
|
|
118
|
+
* catálogo, `resolveChain`) se lee por la conexión del motor mientras el
|
|
119
|
+
* llamante sostiene la suya, y con pool 1 (SQLite `:memory:`) la barrera
|
|
120
|
+
* sale 503 `E_AUTHZ_BACKEND_TIMEOUT` a `freezeTimeoutMs` — fail-closed,
|
|
121
|
+
* nunca un bypass, pero un 503 tardío. Un despliegue con pool 1 declara
|
|
122
|
+
* `false` aquí y la puerta 1 del manager responde 500 `E_AUTHZ_UNSUPPORTED`
|
|
123
|
+
* al instante y con cero sentencias. Declarar `true` con pool 1 no concede
|
|
124
|
+
* nada: solo cambia un 500 inmediato por un 503 a `freezeTimeoutMs`.
|
|
125
|
+
*/
|
|
126
|
+
transactionalWrites?: boolean;
|
|
112
127
|
/**
|
|
113
128
|
* Memo del catálogo compartido con otro driver del mismo proceso (2A). Si
|
|
114
129
|
* se omite, el driver construye el suyo. Se revalida contra la versión
|
|
@@ -158,16 +173,13 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
158
173
|
* herencia (invariante 7); y `purgeRole` está implementado en una
|
|
159
174
|
* transacción.
|
|
160
175
|
*/
|
|
161
|
-
readonly capabilities: Readonly<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
canonicalScopeReads: true;
|
|
169
|
-
enumerateFacts: false;
|
|
170
|
-
}>;
|
|
176
|
+
readonly capabilities: Readonly<AuthorizationDriverCapabilities>;
|
|
177
|
+
/**
|
|
178
|
+
* Con `transactionalWrites: false` declarado por el despliegue, un
|
|
179
|
+
* `{ transaction }` que llegara igual (un llamante que se salta el manager)
|
|
180
|
+
* se rechaza aquí también: no se ignora en silencio.
|
|
181
|
+
*/
|
|
182
|
+
private readonly transactionalWrites;
|
|
171
183
|
/**
|
|
172
184
|
* Resolutor de jerarquía inyectado por el consumidor (el chasis pasa el
|
|
173
185
|
* suyo, que conoce organizations/units, en `config/authorization.ts`).
|
|
@@ -230,6 +242,33 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
230
242
|
*/
|
|
231
243
|
private sql;
|
|
232
244
|
private first;
|
|
245
|
+
/**
|
|
246
|
+
* Por dónde escribe `operation` (L-3): la transacción ABIERTA del llamante
|
|
247
|
+
* si llegó en `options.transaction` —validada contra la conexión de este
|
|
248
|
+
* driver, la primaria de Lucid, por la que escribe todo lo demás: otra
|
|
249
|
+
* conexión, un `QueryClient` o el `db` entero son 500 `E_AUTHZ_CONFIG`
|
|
250
|
+
* ANTES de tocar nada—, o `db`. `external` dice cuál de los dos.
|
|
251
|
+
*
|
|
252
|
+
* Solo la ESCRITURA va por ella. La lectura de «¿ya existe?» de
|
|
253
|
+
* `grant`/`deny` también, porque forma parte de la misma escritura (tiene
|
|
254
|
+
* que ver lo que TU transacción ya escribió: un `grant` y su re-grant en la
|
|
255
|
+
* misma transacción); el catálogo y `resolveChain` no (autoridad, L-1).
|
|
256
|
+
*/
|
|
257
|
+
private writer;
|
|
258
|
+
/**
|
|
259
|
+
* Un INSERT que falla DENTRO de la transacción del llamante no se absorbe
|
|
260
|
+
* (L-3). Fuera de ella `grant`/`deny` releen y se quedan con lo del ganador
|
|
261
|
+
* (K4); dentro no se puede: en PostgreSQL la transacción ya está ABORTADA
|
|
262
|
+
* (toda sentencia posterior es `25P02` hasta el rollback) y en REPEATABLE
|
|
263
|
+
* READ (MySQL por defecto) la relectura no vería al ganador. Así que un
|
|
264
|
+
* choque del UNIQUE sale como **409 `E_AUTHZ_WRITE_CONFLICT`** —«envenena
|
|
265
|
+
* tu transacción: haz rollback y reintenta»—, un deadline vencido sigue
|
|
266
|
+
* siendo el 503 `E_AUTHZ_BACKEND_TIMEOUT` que ya clasificó `sql()` (con
|
|
267
|
+
* `onWrite` `indeterminate: true` en el manager) y cualquier otro fallo, su
|
|
268
|
+
* 503. Nunca una segunda sentencia sobre una transacción que puede estar
|
|
269
|
+
* abortada.
|
|
270
|
+
*/
|
|
271
|
+
private poisoned;
|
|
233
272
|
private get expiry();
|
|
234
273
|
/** Asignación vigente: sin expiración o con expiración futura (estricta: la que vence AHORA ya no cuenta). */
|
|
235
274
|
private whereActive;
|
|
@@ -254,10 +293,10 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
254
293
|
* escritura, K4) devuelve `null`: no hay «existed: true» sobre nada.
|
|
255
294
|
*/
|
|
256
295
|
private refreshAssignment;
|
|
257
|
-
revoke(subject: SubjectRef, role: RoleQuery, scope: ScopeRef): Promise<void>;
|
|
296
|
+
revoke(subject: SubjectRef, role: RoleQuery, scope: ScopeRef, options?: WriteOptions): Promise<void>;
|
|
258
297
|
hasRole(subject: SubjectRef, role: RoleQuery, scope: ScopeRef): Promise<boolean>;
|
|
259
|
-
deny(subject: SubjectRef, permission: string, scope: ScopeRef): Promise<void>;
|
|
260
|
-
removeDeny(subject: SubjectRef, permission: string, scope: ScopeRef): Promise<void>;
|
|
298
|
+
deny(subject: SubjectRef, permission: string, scope: ScopeRef, options?: WriteOptions): Promise<void>;
|
|
299
|
+
removeDeny(subject: SubjectRef, permission: string, scope: ScopeRef, options?: WriteOptions): Promise<void>;
|
|
261
300
|
listSubjects(role: RoleQuery, scope: ScopeRef): Promise<SubjectRef[]>;
|
|
262
301
|
listRoles(subject: SubjectRef, scope: ScopeRef): Promise<string[]>;
|
|
263
302
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/database_driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAE5C,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAEf,eAAe,EACf,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,
|
|
1
|
+
{"version":3,"file":"database_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/database_driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAE5C,OAAO,KAAK,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,cAAc,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAEf,eAAe,EACf,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAmCrD,OAAO,EAAE,YAAY,EAAoF,MAAM,6BAA6B,CAAA;AAC5I,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAE9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;AAUrD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,yCAAyC,CAAA;AAUvE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE3D;AAoED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAgBhI;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CA0BlI;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,WAAW,GAAG,IAAI,CAQpB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,EAAE,CAWnG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,QAAQ,EAAE,GAChB,KAAK,CAAC;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAe9C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAMpF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,WAAW,GAAG,IAAI,CAIpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAAE,EAClB,MAAM,EAAE,OAAO,GACd,YAAY,CAAA;AACf,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAAE,EAClB,MAAM,EAAE,MAAM,GACb,YAAY,GAAG,IAAI,CAAA;AAwBtB,MAAM,WAAW,qBAAqB;IACpC,6FAA6F;IAC7F,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC;;;;;;;;;OASG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;CACZ;AAED,eAAO,MAAM,kBAAkB,OAAQ,CAAA;AAEvC;;;;;;;;;;;;;GAaG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,+BAA+B,CAAC,CAAA;IAChE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,SAAS,CAAQ;IACzB,gHAAgH;IAChH,OAAO,CAAC,GAAG,CAAO;IAClB;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAA2B;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;gBAElB,OAAO,GAAE,qBAA0B;IAuC/C;;;;;;OAMG;IACH,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,GAAG,mBAAmB;IAMxE;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,mBAAmB;IAS1C;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK;IAIb,gFAAgF;IAChF,OAAO,CAAC,UAAU;IAIlB,kEAAkE;IAClE,OAAO,CAAC,eAAe;IAIvB,gHAAgH;IAChH,OAAO,CAAC,gBAAgB;IAIxB;;;;;OAKG;IACH,OAAO,CAAC,GAAG;YAIG,KAAK;IAKnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM;IAed;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ;IAYhB,OAAO,KAAK,MAAM,GAMjB;IAED,8GAA8G;IAC9G,OAAO,CAAC,WAAW;YASL,cAAc;IAI5B;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAkB1B,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA0CrF,KAAK,CACT,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,QAAQ,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,YAAY,CAAC;IAgFxB;;;;;;OAMG;YACW,iBAAiB;IAgBzB,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCpG,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BhF,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CrG,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3G,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiCrE,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+BxE;;;;;;OAMG;IACG,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IAqC/G,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiCpF,uGAAuG;IACvG,OAAO,CAAC,SAAS;IAIX,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAsD9E;;;;OAIG;IACG,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuB3E;;;;;;OAMG;IACG,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BjD;;;;;;;;;OASG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhD;;;;;;;;;;OAUG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsSlG;;;;OAIG;YACW,gBAAgB;CAkB/B"}
|