@jantstack/adonis-authz 2.0.0-alpha.1 → 2.4.0-alpha.2
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 +693 -36
- package/build/commands/authz_catalog_diff.js +1 -1
- package/build/commands/authz_catalog_diff.js.map +1 -1
- package/build/commands/authz_catalog_prune_orphans.d.ts +78 -0
- package/build/commands/authz_catalog_prune_orphans.d.ts.map +1 -0
- package/build/commands/authz_catalog_prune_orphans.js +136 -0
- package/build/commands/authz_catalog_prune_orphans.js.map +1 -0
- package/build/commands/authz_catalog_sync.d.ts +17 -0
- package/build/commands/authz_catalog_sync.d.ts.map +1 -1
- package/build/commands/authz_catalog_sync.js +27 -4
- package/build/commands/authz_catalog_sync.js.map +1 -1
- package/build/commands/authz_freeze.d.ts +44 -0
- package/build/commands/authz_freeze.d.ts.map +1 -0
- package/build/commands/authz_freeze.js +95 -0
- package/build/commands/authz_freeze.js.map +1 -0
- package/build/commands/authz_reconcile.d.ts +102 -0
- package/build/commands/authz_reconcile.d.ts.map +1 -0
- package/build/commands/authz_reconcile.js +294 -0
- package/build/commands/authz_reconcile.js.map +1 -0
- package/build/commands/authz_relations_reconcile.d.ts +97 -0
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -0
- package/build/commands/authz_relations_reconcile.js +313 -0
- package/build/commands/authz_relations_reconcile.js.map +1 -0
- package/build/commands/authz_scopes_relay.d.ts +47 -0
- package/build/commands/authz_scopes_relay.d.ts.map +1 -0
- package/build/commands/authz_scopes_relay.js +141 -0
- package/build/commands/authz_scopes_relay.js.map +1 -0
- package/build/commands/authz_unfreeze.d.ts +37 -0
- package/build/commands/authz_unfreeze.d.ts.map +1 -0
- package/build/commands/authz_unfreeze.js +92 -0
- package/build/commands/authz_unfreeze.js.map +1 -0
- package/build/commands/main.d.ts +6 -1
- package/build/commands/main.d.ts.map +1 -1
- package/build/commands/main.js +6 -1
- package/build/commands/main.js.map +1 -1
- package/build/commands/openfga_provision.d.ts +46 -4
- package/build/commands/openfga_provision.d.ts.map +1 -1
- package/build/commands/openfga_provision.js +90 -7
- package/build/commands/openfga_provision.js.map +1 -1
- package/build/configure.d.ts +11 -0
- package/build/configure.d.ts.map +1 -1
- package/build/configure.js +37 -1
- package/build/configure.js.map +1 -1
- package/build/index.d.ts +50 -10
- package/build/index.d.ts.map +1 -1
- package/build/index.js +45 -6
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts +26 -2
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +55 -2
- package/build/providers/authz_provider.js.map +1 -1
- package/build/services/relations.d.ts +14 -0
- package/build/services/relations.d.ts.map +1 -0
- package/build/services/relations.js +17 -0
- package/build/services/relations.js.map +1 -0
- package/build/src/{catalog.d.ts → catalog/catalog.d.ts} +41 -2
- package/build/src/catalog/catalog.d.ts.map +1 -0
- package/build/src/{catalog.js → catalog/catalog.js} +120 -14
- package/build/src/catalog/catalog.js.map +1 -0
- package/build/src/{catalog_cache.d.ts → catalog/catalog_cache.d.ts} +46 -22
- package/build/src/catalog/catalog_cache.d.ts.map +1 -0
- package/build/src/{catalog_cache.js → catalog/catalog_cache.js} +53 -43
- package/build/src/catalog/catalog_cache.js.map +1 -0
- package/build/src/define_config.d.ts +137 -3
- package/build/src/define_config.d.ts.map +1 -1
- package/build/src/define_config.js.map +1 -1
- package/build/src/drivers/database_driver.d.ts +128 -7
- package/build/src/drivers/database_driver.d.ts.map +1 -1
- package/build/src/drivers/database_driver.js +510 -24
- package/build/src/drivers/database_driver.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +113 -0
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -0
- package/build/src/drivers/database_relations_driver.js +679 -0
- package/build/src/drivers/database_relations_driver.js.map +1 -0
- package/build/src/drivers/openfga_driver.d.ts +729 -122
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +2083 -476
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_facts.d.ts +384 -0
- package/build/src/drivers/openfga_facts.d.ts.map +1 -0
- package/build/src/drivers/openfga_facts.js +836 -0
- package/build/src/drivers/openfga_facts.js.map +1 -0
- package/build/src/drivers/openfga_relations_driver.d.ts +141 -0
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -0
- package/build/src/drivers/openfga_relations_driver.js +590 -0
- package/build/src/drivers/openfga_relations_driver.js.map +1 -0
- package/build/src/errors.d.ts +290 -5
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +296 -7
- package/build/src/errors.js.map +1 -1
- package/build/src/freeze.d.ts +141 -0
- package/build/src/freeze.d.ts.map +1 -0
- package/build/src/freeze.js +217 -0
- package/build/src/freeze.js.map +1 -0
- package/build/src/http/app_access_middleware.d.ts.map +1 -0
- package/build/src/http/app_access_middleware.js.map +1 -0
- package/build/src/http/resource_access_middleware.d.ts +105 -0
- package/build/src/http/resource_access_middleware.d.ts.map +1 -0
- package/build/src/http/resource_access_middleware.js +81 -0
- package/build/src/http/resource_access_middleware.js.map +1 -0
- package/build/src/identity.d.ts +74 -1
- package/build/src/identity.d.ts.map +1 -1
- package/build/src/identity.js +100 -2
- package/build/src/identity.js.map +1 -1
- package/build/src/manager.d.ts +330 -4
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +1285 -188
- package/build/src/manager.js.map +1 -1
- package/build/src/models/authz_assignment.d.ts +7 -7
- package/build/src/models/authz_assignment.d.ts.map +1 -1
- package/build/src/models/authz_deny.d.ts +7 -7
- package/build/src/models/authz_deny.d.ts.map +1 -1
- package/build/src/models/authz_permission.d.ts +7 -7
- package/build/src/models/authz_permission.d.ts.map +1 -1
- package/build/src/models/authz_role.d.ts +7 -7
- package/build/src/models/authz_role.d.ts.map +1 -1
- package/build/src/models/authz_role_permission.d.ts +7 -7
- package/build/src/models/authz_role_permission.d.ts.map +1 -1
- package/build/src/openfga.d.ts +18 -2
- package/build/src/openfga.d.ts.map +1 -1
- package/build/src/openfga.js +15 -1
- package/build/src/openfga.js.map +1 -1
- package/build/src/reconcile.d.ts +37 -0
- package/build/src/reconcile.d.ts.map +1 -0
- package/build/src/reconcile.js +69 -0
- package/build/src/reconcile.js.map +1 -0
- package/build/src/relation_partition_trigger.d.ts +8 -0
- package/build/src/relation_partition_trigger.d.ts.map +1 -0
- package/build/src/relation_partition_trigger.js +93 -0
- package/build/src/relation_partition_trigger.js.map +1 -0
- package/build/src/relations/define_relations_config.d.ts +75 -0
- package/build/src/relations/define_relations_config.d.ts.map +1 -0
- package/build/src/relations/define_relations_config.js +173 -0
- package/build/src/relations/define_relations_config.js.map +1 -0
- package/build/src/relations/manager.d.ts +60 -0
- package/build/src/relations/manager.d.ts.map +1 -0
- package/build/src/relations/manager.js +213 -0
- package/build/src/relations/manager.js.map +1 -0
- package/build/src/relations/reconcile.d.ts +111 -0
- package/build/src/relations/reconcile.d.ts.map +1 -0
- package/build/src/relations/reconcile.js +200 -0
- package/build/src/relations/reconcile.js.map +1 -0
- package/build/src/relations_config_store.d.ts +22 -0
- package/build/src/relations_config_store.d.ts.map +1 -0
- package/build/src/relations_config_store.js +74 -0
- package/build/src/relations_config_store.js.map +1 -0
- package/build/src/scope_outbox.d.ts +69 -0
- package/build/src/scope_outbox.d.ts.map +1 -0
- package/build/src/scope_outbox.js +298 -0
- package/build/src/scope_outbox.js.map +1 -0
- package/build/src/{drivers → shared}/backend_guard.d.ts +42 -0
- package/build/src/shared/backend_guard.d.ts.map +1 -0
- package/build/src/{drivers → shared}/backend_guard.js +78 -1
- package/build/src/shared/backend_guard.js.map +1 -0
- package/build/src/shared/sql_expiry.d.ts.map +1 -0
- package/build/src/shared/sql_expiry.js.map +1 -0
- package/build/src/shared/transaction_guard.d.ts +50 -0
- package/build/src/shared/transaction_guard.d.ts.map +1 -0
- package/build/src/shared/transaction_guard.js +60 -0
- package/build/src/shared/transaction_guard.js.map +1 -0
- package/build/src/sql_descendants.d.ts +47 -1
- package/build/src/sql_descendants.d.ts.map +1 -1
- package/build/src/sql_descendants.js +75 -1
- package/build/src/sql_descendants.js.map +1 -1
- package/build/src/testing/contract.d.ts +129 -4
- package/build/src/testing/contract.d.ts.map +1 -1
- package/build/src/testing/contract.js +912 -177
- package/build/src/testing/contract.js.map +1 -1
- package/build/src/testing/main.d.ts +8 -2
- package/build/src/testing/main.d.ts.map +1 -1
- package/build/src/testing/main.js +4 -1
- package/build/src/testing/main.js.map +1 -1
- package/build/src/testing/migration_contract.d.ts +284 -0
- package/build/src/testing/migration_contract.d.ts.map +1 -0
- package/build/src/testing/migration_contract.js +586 -0
- package/build/src/testing/migration_contract.js.map +1 -0
- package/build/src/testing/relations_contract.d.ts +73 -0
- package/build/src/testing/relations_contract.d.ts.map +1 -0
- package/build/src/testing/relations_contract.js +1069 -0
- package/build/src/testing/relations_contract.js.map +1 -0
- package/build/src/testing/relations_reconcile_contract.d.ts +24 -0
- package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -0
- package/build/src/testing/relations_reconcile_contract.js +220 -0
- package/build/src/testing/relations_reconcile_contract.js.map +1 -0
- package/build/src/traits/authz_scopes.js +1 -1
- package/build/src/traits/authz_scopes.js.map +1 -1
- package/build/src/traits/has_uuid.d.ts +8 -8
- package/build/src/traits/has_uuid.d.ts.map +1 -1
- package/build/src/types.d.ts +1053 -83
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js +10 -0
- package/build/src/types.js.map +1 -1
- package/build/stubs/config/authorization.stub +104 -4
- package/build/stubs/migration.stub +136 -0
- package/build/stubs/scopes_outbox_migration.stub +57 -0
- package/package.json +4 -2
- package/build/commands/openfga_import.d.ts +0 -34
- package/build/commands/openfga_import.d.ts.map +0 -1
- package/build/commands/openfga_import.js +0 -97
- package/build/commands/openfga_import.js.map +0 -1
- package/build/src/catalog.d.ts.map +0 -1
- package/build/src/catalog.js.map +0 -1
- package/build/src/catalog_cache.d.ts.map +0 -1
- package/build/src/catalog_cache.js.map +0 -1
- package/build/src/drivers/backend_guard.d.ts.map +0 -1
- package/build/src/drivers/backend_guard.js.map +0 -1
- package/build/src/drivers/sql_expiry.d.ts.map +0 -1
- package/build/src/drivers/sql_expiry.js.map +0 -1
- package/build/src/middleware/app_access_middleware.d.ts.map +0 -1
- package/build/src/middleware/app_access_middleware.js.map +0 -1
- /package/build/src/{middleware → http}/app_access_middleware.d.ts +0 -0
- /package/build/src/{middleware → http}/app_access_middleware.js +0 -0
- /package/build/src/{drivers → shared}/sql_expiry.d.ts +0 -0
- /package/build/src/{drivers → shared}/sql_expiry.js +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import db from '@adonisjs/lucid/services/db';
|
|
2
|
-
import type { AuthorizationDriver, CatalogRoleRef, DenyRef, GrantOptions, GrantOutcome, NormalizedRoleQuery, 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
|
-
import { CatalogCache } from '../catalog_cache.js';
|
|
5
|
-
import type { CatalogRevalidate, CatalogRole, CatalogView } from '../catalog_cache.js';
|
|
4
|
+
import { CatalogCache } from '../catalog/catalog_cache.js';
|
|
5
|
+
import type { CatalogRevalidate, CatalogRole, CatalogView } from '../catalog/catalog_cache.js';
|
|
6
6
|
import type { Clock } from '../clock.js';
|
|
7
7
|
export type QueryBuilder = ReturnType<typeof db.from>;
|
|
8
8
|
/**
|
|
@@ -12,6 +12,15 @@ export type QueryBuilder = ReturnType<typeof db.from>;
|
|
|
12
12
|
* de ESTE driver — la API pública sigue usando uuid null para app.
|
|
13
13
|
*/
|
|
14
14
|
export declare const APP_SCOPE_DB_UUID = "00000000-0000-0000-0000-000000000000";
|
|
15
|
+
/**
|
|
16
|
+
* La vuelta de `toDbScopeUuid`: el centinela de la raíz vuelve a ser `null`.
|
|
17
|
+
* **Exportada desde 3b-3b**: `authz:reconcile --to=openfga` lee estas mismas
|
|
18
|
+
* columnas y hacía `row.scope_uuid ?? null`, que con la columna NOT NULL
|
|
19
|
+
* nunca es null — un grant o un deny en la RAÍZ reventaban la migración con
|
|
20
|
+
* un 422 a mitad de pasada (`el scope 'app' no admite uuid`). Lo cazó el
|
|
21
|
+
* contrato de migración, cuya siembra fija sí concede en `app`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function fromDbScopeUuid(uuid: string): string | null;
|
|
15
24
|
/**
|
|
16
25
|
* El rol `(slug, scopeType)` que existe en el scope cuya cadena empieza por
|
|
17
26
|
* `chainKeys`, o 422: `E_AUTHZ_ROLE_NOT_VISIBLE` si hay roles con ese nombre
|
|
@@ -100,6 +109,21 @@ export interface DatabaseDriverOptions {
|
|
|
100
109
|
* request autorizada en un socket retenido para siempre (L0.13).
|
|
101
110
|
*/
|
|
102
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;
|
|
103
127
|
/**
|
|
104
128
|
* Memo del catálogo compartido con otro driver del mismo proceso (2A). Si
|
|
105
129
|
* se omite, el driver construye el suyo. Se revalida contra la versión
|
|
@@ -141,6 +165,21 @@ export declare const DEFAULT_TIMEOUT_MS = 5000;
|
|
|
141
165
|
* crudo de knex (L0.11).
|
|
142
166
|
*/
|
|
143
167
|
export declare class DatabaseAuthorizationDriver implements AuthorizationDriver {
|
|
168
|
+
/**
|
|
169
|
+
* Lo que este driver declara (3b-2e · E2). El árbol es del consumidor
|
|
170
|
+
* (`resolveChain`), así que no hay hechos de jerarquía ni deriva que
|
|
171
|
+
* mitigar; `authorize` son varias consultas SQL; la membresía la resuelve
|
|
172
|
+
* el propio SQL contra la cadena que le pasan; los `list*` no enumeran
|
|
173
|
+
* herencia (invariante 7); y `purgeRole` está implementado en una
|
|
174
|
+
* transacción.
|
|
175
|
+
*/
|
|
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;
|
|
144
183
|
/**
|
|
145
184
|
* Resolutor de jerarquía inyectado por el consumidor (el chasis pasa el
|
|
146
185
|
* suyo, que conoce organizations/units, en `config/authorization.ts`).
|
|
@@ -191,8 +230,10 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
191
230
|
private chain;
|
|
192
231
|
/** La cadena o 422: una escritura no puede ir a un scope que nadie reconoce. */
|
|
193
232
|
private knownScope;
|
|
194
|
-
/** El scope canónico para `
|
|
233
|
+
/** El scope canónico para `purgeScope` (ver `canonicalScope`). */
|
|
195
234
|
private canonicalOrSelf;
|
|
235
|
+
/** Los destinos de un delete de hechos (`revoke`/`removeDeny`): canónico, o el fan-out de alias (3b-8 · A4). */
|
|
236
|
+
private canonicalTargets;
|
|
196
237
|
/**
|
|
197
238
|
* Ejecuta una consulta clasificando su fallo (503 con código propio). `fn`
|
|
198
239
|
* devuelve el BUILDER sin ejecutar: el guard le fija el deadline y luego lo
|
|
@@ -201,6 +242,33 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
201
242
|
*/
|
|
202
243
|
private sql;
|
|
203
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;
|
|
204
272
|
private get expiry();
|
|
205
273
|
/** Asignación vigente: sin expiración o con expiración futura (estricta: la que vence AHORA ya no cuenta). */
|
|
206
274
|
private whereActive;
|
|
@@ -225,10 +293,10 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
225
293
|
* escritura, K4) devuelve `null`: no hay «existed: true» sobre nada.
|
|
226
294
|
*/
|
|
227
295
|
private refreshAssignment;
|
|
228
|
-
revoke(subject: SubjectRef, role: RoleQuery, scope: ScopeRef): Promise<void>;
|
|
296
|
+
revoke(subject: SubjectRef, role: RoleQuery, scope: ScopeRef, options?: WriteOptions): Promise<void>;
|
|
229
297
|
hasRole(subject: SubjectRef, role: RoleQuery, scope: ScopeRef): Promise<boolean>;
|
|
230
|
-
deny(subject: SubjectRef, permission: string, scope: ScopeRef): Promise<void>;
|
|
231
|
-
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>;
|
|
232
300
|
listSubjects(role: RoleQuery, scope: ScopeRef): Promise<SubjectRef[]>;
|
|
233
301
|
listRoles(subject: SubjectRef, scope: ScopeRef): Promise<string[]>;
|
|
234
302
|
/**
|
|
@@ -271,5 +339,58 @@ export declare class DatabaseAuthorizationDriver implements AuthorizationDriver
|
|
|
271
339
|
* `manager.driver()`) se purga lo que se pida.
|
|
272
340
|
*/
|
|
273
341
|
purgeRole(roleUuid: string): Promise<void>;
|
|
342
|
+
/**
|
|
343
|
+
* Cuántos hechos VIGENTES tiene cada rol, en todos los scopes (3b-2j). Es
|
|
344
|
+
* lo que `pruneOrphanRoles` necesita para decir si un huérfano todavía
|
|
345
|
+
* concede, y es una pregunta del PUERTO porque los hechos son del driver:
|
|
346
|
+
* aquí son filas de `authz_assignments`, en `openfga` son tuplas del store.
|
|
347
|
+
*
|
|
348
|
+
* Una consulta agrupada para todos los uuids (no una por rol) y la misma
|
|
349
|
+
* caducidad ESTRICTA que el resto del driver, con SU reloj (`whereActive`,
|
|
350
|
+
* J1): la asignación que vence ahora ya no cuenta, como no cuenta en
|
|
351
|
+
* `authorize`. Un rol sin hechos —o que no está en la tabla— es `0`.
|
|
352
|
+
*/
|
|
353
|
+
countRoleAssignments(roleUuids: string[]): Promise<number[]>;
|
|
354
|
+
/**
|
|
355
|
+
* **Rehace `authz_assignments`/`authz_denies` desde los hechos de OTRO
|
|
356
|
+
* driver** — la vuelta de la migración, y con ella la simetría que el dueño
|
|
357
|
+
* compró: «todo en un driver o todo en otro».
|
|
358
|
+
*
|
|
359
|
+
* Qué se migra y qué NO, y por qué:
|
|
360
|
+
* - **los HECHOS, sí**: es lo único que vive en el otro driver. Llegan por
|
|
361
|
+
* `source.facts` —el puerto `enumerateFacts`, paginado— y no por SQL:
|
|
362
|
+
* aquí el origen es un store, no una tabla de este paquete.
|
|
363
|
+
* - **el ÁRBOL, no**. En esta dirección el árbol NO se migra: el driver
|
|
364
|
+
* `database` lo lee de las tablas del CONSUMIDOR en cada pregunta
|
|
365
|
+
* (`resolveChain`), que son su fuente de verdad. Copiarlo a algún sitio
|
|
366
|
+
* sería inventarse una segunda copia y con ella una deriva que hoy no
|
|
367
|
+
* existe. Se usa, eso sí, para decidir qué hecho es migrable
|
|
368
|
+
* (`unknown-scope`) y bajo qué identidad CANÓNICA se escribe
|
|
369
|
+
* (invariante 17).
|
|
370
|
+
* - **el CATÁLOGO, tampoco**: es propiedad local SIEMPRE (regla de higiene
|
|
371
|
+
* del paquete), ya está en `authz_*` y ningún driver es su fuente. Aquí
|
|
372
|
+
* solo se usa para traducir: un `roleUuid` que el catálogo no declara y
|
|
373
|
+
* un permiso que no existe no son hechos migrables.
|
|
374
|
+
*
|
|
375
|
+
* Por eso `phases.root`, `phases.catalog` y `phases.tree` son CERO en esta
|
|
376
|
+
* dirección, y todo el movimiento está en `phases.facts`. Es una respuesta,
|
|
377
|
+
* no un hueco: los ceros dicen «aquí no hay nada derivado que rehacer».
|
|
378
|
+
*
|
|
379
|
+
* El resto del contrato es el mismo que en la ida (3b-3a): idempotente (la
|
|
380
|
+
* segunda pasada escribe cero), `dryRun` es el VERIFICADOR y es read-only
|
|
381
|
+
* por contrato —**un `--fix` está prohibido** (cruce 4 · S18) y no se
|
|
382
|
+
* implementa ni se deja preparado—, nunca silenciosa (`skipped{motivo}` +
|
|
383
|
+
* `details`), los hechos que sobran solo se borran con `prune`, y el
|
|
384
|
+
* seguro del origen ciego (`E_AUTHZ_MASS_RECONCILE_REFUSED`) se aplica
|
|
385
|
+
* igual: un origen que devuelve CERO hechos y un `--prune` detrás vacían
|
|
386
|
+
* la base, y eso es casi siempre apuntar al store equivocado.
|
|
387
|
+
*/
|
|
388
|
+
reconcile(source: ReconcileSource, options?: ReconcileOptions): Promise<ReconcileReport>;
|
|
389
|
+
/**
|
|
390
|
+
* Pasea una tabla `authz_*` por lotes con cursor sobre `uuid` (PK: orden
|
|
391
|
+
* total y estable). Lo mismo que hace `openfga.reconcile` con el origen,
|
|
392
|
+
* por el mismo motivo: una base grande no entra entera de golpe.
|
|
393
|
+
*/
|
|
394
|
+
private eachReconcileRow;
|
|
274
395
|
}
|
|
275
396
|
//# sourceMappingURL=database_driver.d.ts.map
|
|
@@ -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,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,
|
|
1
|
+
{"version":3,"file":"database_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/database_driver.ts"],"names":[],"mappings":"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"}
|