@jantstack/adonis-authz 2.0.0-alpha.1 → 2.4.0-alpha.1
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 +462 -35
- 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 +73 -0
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -0
- package/build/commands/authz_relations_reconcile.js +225 -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 +39 -10
- package/build/index.d.ts.map +1 -1
- package/build/index.js +35 -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 +48 -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 +101 -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 +86 -4
- package/build/src/drivers/database_driver.d.ts.map +1 -1
- package/build/src/drivers/database_driver.js +425 -11
- package/build/src/drivers/database_driver.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +75 -0
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -0
- package/build/src/drivers/database_relations_driver.js +450 -0
- package/build/src/drivers/database_relations_driver.js.map +1 -0
- package/build/src/drivers/openfga_driver.d.ts +713 -119
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +2048 -476
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_facts.d.ts +369 -0
- package/build/src/drivers/openfga_facts.d.ts.map +1 -0
- package/build/src/drivers/openfga_facts.js +813 -0
- package/build/src/drivers/openfga_facts.js.map +1 -0
- package/build/src/drivers/openfga_relations_driver.d.ts +120 -0
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -0
- package/build/src/drivers/openfga_relations_driver.js +466 -0
- package/build/src/drivers/openfga_relations_driver.js.map +1 -0
- package/build/src/errors.d.ts +258 -5
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +238 -7
- package/build/src/errors.js.map +1 -1
- package/build/src/freeze.d.ts +120 -0
- package/build/src/freeze.d.ts.map +1 -0
- package/build/src/freeze.js +172 -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 +315 -4
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +1187 -181
- package/build/src/manager.js.map +1 -1
- package/build/src/models/authz_assignment.d.ts +6 -6
- package/build/src/models/authz_assignment.d.ts.map +1 -1
- package/build/src/models/authz_deny.d.ts +6 -6
- package/build/src/models/authz_deny.d.ts.map +1 -1
- package/build/src/models/authz_permission.d.ts +6 -6
- package/build/src/models/authz_permission.d.ts.map +1 -1
- package/build/src/models/authz_role.d.ts +6 -6
- package/build/src/models/authz_role.d.ts.map +1 -1
- package/build/src/models/authz_role_permission.d.ts +6 -6
- 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 +85 -0
- package/build/src/relation_partition_trigger.js.map +1 -0
- package/build/src/relations/define_relations_config.d.ts +58 -0
- package/build/src/relations/define_relations_config.d.ts.map +1 -0
- package/build/src/relations/define_relations_config.js +144 -0
- package/build/src/relations/define_relations_config.js.map +1 -0
- package/build/src/relations/manager.d.ts +38 -0
- package/build/src/relations/manager.d.ts.map +1 -0
- package/build/src/relations/manager.js +156 -0
- package/build/src/relations/manager.js.map +1 -0
- package/build/src/relations/reconcile.d.ts +62 -0
- package/build/src/relations/reconcile.d.ts.map +1 -0
- package/build/src/relations/reconcile.js +138 -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 +291 -0
- package/build/src/scope_outbox.js.map +1 -0
- package/build/src/{drivers → shared}/backend_guard.d.ts +14 -0
- package/build/src/shared/backend_guard.d.ts.map +1 -0
- package/build/src/{drivers → shared}/backend_guard.js +26 -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/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 +74 -0
- package/build/src/testing/contract.d.ts.map +1 -1
- package/build/src/testing/contract.js +672 -169
- package/build/src/testing/contract.js.map +1 -1
- package/build/src/testing/main.d.ts +6 -0
- package/build/src/testing/main.d.ts.map +1 -1
- package/build/src/testing/main.js +3 -0
- 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 +51 -0
- package/build/src/testing/relations_contract.d.ts.map +1 -0
- package/build/src/testing/relations_contract.js +654 -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 +172 -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 +7 -7
- package/build/src/traits/has_uuid.d.ts.map +1 -1
- package/build/src/types.d.ts +865 -82
- 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 +126 -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,10 +1,10 @@
|
|
|
1
1
|
import db from '@adonisjs/lucid/services/db';
|
|
2
2
|
import { v7 as uuidv7 } from 'uuid';
|
|
3
|
-
import { assertCatalogUuid, assertNoSlugCollisions, assertScopeType, assertValidSlug, scopeFromKey, scopeKey } from '
|
|
4
|
-
import { CatalogConflictError, InvalidIdentityError, RoleNotAssignableAtError, UnknownPermissionError } from '
|
|
5
|
-
import { guardSql } from '
|
|
3
|
+
import { assertCatalogUuid, assertNoSlugCollisions, assertScopeType, assertValidSlug, scopeFromKey, scopeKey } from '../identity.js';
|
|
4
|
+
import { CatalogConflictError, InvalidIdentityError, RoleNotAssignableAtError, UnknownPermissionError } from '../errors.js';
|
|
5
|
+
import { guardSql } from '../shared/backend_guard.js';
|
|
6
6
|
import { GLOBAL_OWNER_KEY, invalidateAuthzCatalog, parseAssignableAt, withAuthzCatalogWrite } from './catalog_cache.js';
|
|
7
|
-
import { systemClock } from '
|
|
7
|
+
import { systemClock } from '../clock.js';
|
|
8
8
|
/**
|
|
9
9
|
* `assignableAt` de un permiso tal como se GUARDA (`authz_permissions.assignable_at`):
|
|
10
10
|
* JSON ordenado y sin duplicados, o `null` = cualquier nivel. Ordenado para
|
|
@@ -158,15 +158,29 @@ export async function syncAuthzCatalog(catalog, options = {}) {
|
|
|
158
158
|
// que confirmó tiene que verse en la siguiente pregunta también con
|
|
159
159
|
// `everyMs`, y uno que falló al confirmar no se sabe si confirmó. Recargar
|
|
160
160
|
// de más es gratis; servir un catálogo viejo no.
|
|
161
|
+
let report;
|
|
162
|
+
let snapshot = null;
|
|
161
163
|
try {
|
|
162
|
-
|
|
164
|
+
const done = await syncInTransaction(catalog, prune, sql, one, timeoutMs, options.projection);
|
|
165
|
+
report = done.report;
|
|
166
|
+
snapshot = done.snapshot;
|
|
163
167
|
}
|
|
164
168
|
finally {
|
|
165
169
|
invalidateAuthzCatalog();
|
|
166
170
|
}
|
|
171
|
+
// La proyección se rehace con el catálogo YA CONFIRMADO y fuera de la
|
|
172
|
+
// transacción: el store no participa del commit de SQL (no hay 2PC), así
|
|
173
|
+
// que la fuente de verdad se escribe primero y lo derivado después. Un
|
|
174
|
+
// fallo aquí deja deriva —reconstruible con `authz:reconcile`—, nunca una
|
|
175
|
+
// concesión que las tablas no respalden.
|
|
176
|
+
if (options.projection && snapshot) {
|
|
177
|
+
report.projection = await options.projection.project(snapshot);
|
|
178
|
+
}
|
|
179
|
+
return report;
|
|
167
180
|
}
|
|
168
|
-
async function syncInTransaction(catalog, prune, sql, one, timeoutMs) {
|
|
181
|
+
async function syncInTransaction(catalog, prune, sql, one, timeoutMs, projection) {
|
|
169
182
|
const report = { shadowedByGlobal: [], assignableAtViolations: [] };
|
|
183
|
+
let snapshot = null;
|
|
170
184
|
await sql('sync', () => withAuthzCatalogWrite(async (trx) => {
|
|
171
185
|
// 0. Colisión tras codificar también contra lo que YA hay en la base:
|
|
172
186
|
// `docs:write` de otro catálogo y `docs_write` de este serían UNA
|
|
@@ -176,6 +190,19 @@ async function syncInTransaction(catalog, prune, sql, one, timeoutMs) {
|
|
|
176
190
|
...catalog.permissions.map((p) => p.slug),
|
|
177
191
|
...stored.map((p) => p.slug),
|
|
178
192
|
]);
|
|
193
|
+
// 0.5 ¿El catálogo que va a quedar es PUBLICABLE en el backend del
|
|
194
|
+
// driver? (3b-2a · A3/A4). ANTES de escribir nada: si se escribiera
|
|
195
|
+
// primero, un catálogo que rebasa el techo del modelo quedaría en la
|
|
196
|
+
// base sin poder proyectarse nunca y con el store sin poder
|
|
197
|
+
// regenerarse. Los permisos que van a existir son los de la base más
|
|
198
|
+
// los del spec (el sync no borra permisos).
|
|
199
|
+
if (projection) {
|
|
200
|
+
const willExist = new Set([
|
|
201
|
+
...stored.map((p) => String(p.slug)),
|
|
202
|
+
...catalog.permissions.map((p) => p.slug),
|
|
203
|
+
]);
|
|
204
|
+
projection.assertPublishable([...willExist].sort());
|
|
205
|
+
}
|
|
179
206
|
// 1. Permisos: upsert por slug; `assignable_at` manda el config (B5).
|
|
180
207
|
for (const perm of catalog.permissions) {
|
|
181
208
|
const existing = await one('sync.permission', () => trx.from('authz_permissions').where('slug', perm.slug).select('uuid', 'assignable_at'));
|
|
@@ -331,11 +358,54 @@ async function syncInTransaction(catalog, prune, sql, one, timeoutMs) {
|
|
|
331
358
|
});
|
|
332
359
|
}
|
|
333
360
|
}
|
|
361
|
+
// 3.9 Foto del catálogo para la proyección del driver (3b-2a · A5).
|
|
362
|
+
// Se lee DENTRO de la transacción para que sea coherente, y se
|
|
363
|
+
// proyecta fuera, con el commit hecho. Es el catálogo ENTERO, no el
|
|
364
|
+
// spec: la proyección es un espejo, y lo que sobra en el store solo
|
|
365
|
+
// se sabe comparando contra todo.
|
|
366
|
+
if (projection) {
|
|
367
|
+
snapshot = await readCatalogProjectionSnapshot(trx, (operation, fn) => sql(`sync.projection.${operation}`, fn));
|
|
368
|
+
}
|
|
334
369
|
// 4. La versión compartida la sube `withAuthzCatalogWrite` al salir de
|
|
335
370
|
// aquí, como última sentencia: o se confirma todo (catálogo nuevo +
|
|
336
371
|
// versión nueva) o nada.
|
|
337
372
|
}, { driver: 'catalog', timeoutMs }));
|
|
338
|
-
return report;
|
|
373
|
+
return { report, snapshot };
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* **La foto del catálogo que se PROYECTA** (3b-2a · A5), leída de `authz_*`.
|
|
377
|
+
*
|
|
378
|
+
* Es el catálogo ENTERO, no el spec que se está sincronizando: la proyección
|
|
379
|
+
* es un espejo y lo que sobra en el backend solo se sabe comparando contra
|
|
380
|
+
* todo. `syncAuthzCatalog` la lee DENTRO de su transacción (coherente con lo
|
|
381
|
+
* que acaba de escribir) y `authz:reconcile` fuera, contra la base: las dos
|
|
382
|
+
* tienen que construir exactamente la misma foto, o reconcile "arreglaría" en
|
|
383
|
+
* cada pasada lo que el sync acaba de dejar bien. Por eso está aquí y no
|
|
384
|
+
* duplicada en el driver.
|
|
385
|
+
*
|
|
386
|
+
* `source` es cualquier cosa con `from(tabla)` (el `db` de Lucid o una
|
|
387
|
+
* transacción) y `sql` envuelve cada consulta con el deadline de quien llama.
|
|
388
|
+
*/
|
|
389
|
+
export async function readCatalogProjectionSnapshot(source, sql = (_operation, fn) => fn()) {
|
|
390
|
+
const permissions = await sql('permissions', () => source.from('authz_permissions').select('uuid', 'slug'));
|
|
391
|
+
const roles = await sql('roles', () => source.from('authz_roles').select('uuid'));
|
|
392
|
+
const links = await sql('links', () => source.from('authz_role_permissions').select('role_uuid', 'permission_uuid'));
|
|
393
|
+
const slugByUuid = new Map(permissions.map((p) => [String(p.uuid), String(p.slug)]));
|
|
394
|
+
const permissionsByRole = new Map(roles.map((r) => [String(r.uuid), []]));
|
|
395
|
+
for (const link of links) {
|
|
396
|
+
const slug = slugByUuid.get(String(link.permission_uuid));
|
|
397
|
+
const list = permissionsByRole.get(String(link.role_uuid));
|
|
398
|
+
// Un vínculo sin rol o sin permiso no existe (FK): si apareciera,
|
|
399
|
+
// proyectarlo sería inventar catálogo.
|
|
400
|
+
if (slug && list)
|
|
401
|
+
list.push(slug);
|
|
402
|
+
}
|
|
403
|
+
return {
|
|
404
|
+
permissions: [...slugByUuid.values()].sort(),
|
|
405
|
+
roles: [...permissionsByRole.entries()]
|
|
406
|
+
.map(([uuid, perms]) => ({ uuid, permissions: perms.sort() }))
|
|
407
|
+
.sort((a, b) => (a.uuid < b.uuid ? -1 : a.uuid > b.uuid ? 1 : 0)),
|
|
408
|
+
};
|
|
339
409
|
}
|
|
340
410
|
/**
|
|
341
411
|
* Compara un spec con lo que hay en `authz_*`, sin escribir. Igual que el
|
|
@@ -555,12 +625,22 @@ async function classifyHomonyms(sql, resolveChain) {
|
|
|
555
625
|
// eso dejaba de detectarse una pareja de locales CONTRADICTORIA (dos
|
|
556
626
|
// owners que se declaran ancestro el uno del otro), que es la única
|
|
557
627
|
// deriva de verdad de esta clasificación: un caso ciego nuevo.
|
|
558
|
-
|
|
559
|
-
|
|
628
|
+
// 3b-1 · T-3b 3 (tester 3F · §6.3): UNA línea por rol ENSOMBRECIDO, no
|
|
629
|
+
// una por pareja. Con owners anidados a > b > c salían tres (a→b, a→c,
|
|
630
|
+
// b→c) para tres roles, y la tercera no añadía nada: lo que el operador
|
|
631
|
+
// necesita saber es qué `(slug, nivel)` está muerto y quién manda ahí.
|
|
632
|
+
// El ensombrecedor que se nombra es el MÁS AUTORIZADO —el ancestro más
|
|
633
|
+
// alto de la cadena del ensombrecido—, que es el orden que 3F · S3 fijó.
|
|
634
|
+
for (const b of locals) {
|
|
635
|
+
const chainB = await chainOf(b);
|
|
636
|
+
if (!chainB)
|
|
637
|
+
continue;
|
|
638
|
+
const shadowers = [];
|
|
639
|
+
for (const a of locals) {
|
|
560
640
|
if (a === b)
|
|
561
641
|
continue;
|
|
562
642
|
// `a` está en la cadena de `b`: `a` es su ancestro y lo ensombrece.
|
|
563
|
-
if (!
|
|
643
|
+
if (!chainB.includes(a))
|
|
564
644
|
continue;
|
|
565
645
|
if ((await chainOf(a))?.includes(b)) {
|
|
566
646
|
// Y `b` en la de `a`: el árbol se contradice y nadie manda.
|
|
@@ -570,8 +650,13 @@ async function classifyHomonyms(sql, resolveChain) {
|
|
|
570
650
|
}
|
|
571
651
|
continue;
|
|
572
652
|
}
|
|
573
|
-
|
|
653
|
+
shadowers.push(a);
|
|
574
654
|
}
|
|
655
|
+
if (!shadowers.length)
|
|
656
|
+
continue;
|
|
657
|
+
// Más lejos en la cadena de `b` = más arriba en el árbol = más autoridad.
|
|
658
|
+
shadowers.sort((x, y) => chainB.indexOf(y) - chainB.indexOf(x));
|
|
659
|
+
result.shadowedByAncestor.push({ slug, scopeType, owner: b, shadowedBy: shadowers[0] });
|
|
575
660
|
}
|
|
576
661
|
}
|
|
577
662
|
return result;
|
|
@@ -692,11 +777,31 @@ export async function runCatalogDiff(catalogs, options = {}) {
|
|
|
692
777
|
// extraerlos, y sus líneas salían indentadas DENTRO del bloque de
|
|
693
778
|
// diferencias del último catálogo, como si fueran suyas).
|
|
694
779
|
let scoped = [];
|
|
695
|
-
|
|
780
|
+
// 3b-1 · T-3b 1 (tester 3F · §6.1): las sombras se ACUMULAN sobre todos los
|
|
781
|
+
// catálogos, con deduplicación. `diff.shadowedByGlobal` tiene una fuente
|
|
782
|
+
// DEPENDIENTE del spec (un rol del spec homónimo de un local), así que
|
|
783
|
+
// tomarlas del índice 0 perdía por completo las que causaba un rol del
|
|
784
|
+
// catálogo #2: no salían como línea de sombras ni como diferencia de ese
|
|
785
|
+
// catálogo. `scopedRoles` sí sale del índice 0: lee la BASE y no depende
|
|
786
|
+
// del spec, así que repetir el diff entero solo para él sería gratuito
|
|
787
|
+
// (3E · Q6).
|
|
788
|
+
const sombras = {
|
|
789
|
+
shadowedByGlobal: [],
|
|
790
|
+
shadowedByAncestor: [],
|
|
791
|
+
};
|
|
696
792
|
for (const [index, spec] of specs.entries()) {
|
|
697
793
|
const diff = await diffAuthzCatalog(spec, options);
|
|
698
|
-
|
|
699
|
-
|
|
794
|
+
for (const s of diff.shadowedByGlobal) {
|
|
795
|
+
if (sombras.shadowedByGlobal.some((x) => x.slug === s.slug && x.scopeType === s.scopeType && x.owner === s.owner))
|
|
796
|
+
continue;
|
|
797
|
+
sombras.shadowedByGlobal.push(s);
|
|
798
|
+
}
|
|
799
|
+
for (const s of diff.shadowedByAncestor) {
|
|
800
|
+
if (sombras.shadowedByAncestor.some((x) => x.slug === s.slug && x.scopeType === s.scopeType && x.owner === s.owner && x.shadowedBy === s.shadowedBy)) {
|
|
801
|
+
continue;
|
|
802
|
+
}
|
|
803
|
+
sombras.shadowedByAncestor.push(s);
|
|
804
|
+
}
|
|
700
805
|
if (index === 0)
|
|
701
806
|
scoped = formatScopedRoles(diff);
|
|
702
807
|
if (catalogInSync(diff)) {
|
|
@@ -708,6 +813,7 @@ export async function runCatalogDiff(catalogs, options = {}) {
|
|
|
708
813
|
for (const line of formatCatalogDiff(diff))
|
|
709
814
|
lines.push(` ${line}`);
|
|
710
815
|
}
|
|
816
|
+
const shadowed = formatShadowedRoles(sombras);
|
|
711
817
|
if (shadowed.length) {
|
|
712
818
|
lines.push('roles locales ENSOMBRECIDOS por una definición más autorizada (no son deriva: 3F · S3):');
|
|
713
819
|
for (const line of shadowed)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/catalog/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TransactionClientContract } from '@adonisjs/lucid/types/database';
|
|
2
|
-
import type { CatalogRole, CatalogRoleRef, ScopeType } from '
|
|
2
|
+
import type { CatalogRole, CatalogRoleRef, ScopeType } from '../types.js';
|
|
3
3
|
export type { CatalogRole, CatalogRoleRef };
|
|
4
4
|
/**
|
|
5
5
|
* Memo del CATÁLOGO (roles, permisos y vínculos rol→permiso), y de nada más.
|
|
@@ -101,6 +101,14 @@ export interface CatalogView {
|
|
|
101
101
|
* `scopes.detached` tiene que purgar para que el scope no deje roles
|
|
102
102
|
* huérfanos que bloqueen su `(slug, nivel)` para siempre. Copia por llamada.
|
|
103
103
|
*/
|
|
104
|
+
/**
|
|
105
|
+
* TODOS los roles LOCALES (owner ≠ `global`), sea cual sea su owner
|
|
106
|
+
* (3b-2e · E1). Es lo que el barrido de `scopes.moved` del driver `facts`
|
|
107
|
+
* necesita para saber qué bindings pueden haber dejado de ser visibles: un
|
|
108
|
+
* rol GLOBAL no cambia nunca de visibilidad, así que un catálogo SIN roles
|
|
109
|
+
* locales hace que el barrido cueste CERO requests. Copia por llamada.
|
|
110
|
+
*/
|
|
111
|
+
localRoles(): CatalogRole[];
|
|
104
112
|
rolesOwnedBy(ownerKey: string): CatalogRole[];
|
|
105
113
|
/** Roles que conceden el permiso (con su owner), agrupados por nivel (`scope_type`). Copia por llamada. */
|
|
106
114
|
rolesGranting(permissionUuid: string): Map<ScopeType, CatalogRoleRef[]>;
|
|
@@ -124,6 +132,13 @@ export interface CatalogView {
|
|
|
124
132
|
export declare function invalidateAuthzCatalog(): void;
|
|
125
133
|
/** Deadline de cada consulta de carga (el mismo default que el catálogo). */
|
|
126
134
|
export declare const DEFAULT_CATALOG_CACHE_TIMEOUT_MS = 5000;
|
|
135
|
+
/**
|
|
136
|
+
* Cota por defecto de `readLocalRoles` (3b-0b · AB2): cuántos roles LOCALES
|
|
137
|
+
* puede devolver una pasada de `prune-orphans` antes de rendirse con 500.
|
|
138
|
+
* Es del mismo orden que `maxScopes`/`maxDescendants`: una lectura sin
|
|
139
|
+
* `LIMIT` sobre una tabla que el consumidor hace crecer.
|
|
140
|
+
*/
|
|
141
|
+
export declare const DEFAULT_MAX_LOCAL_ROLES = 10000;
|
|
127
142
|
/** Lo mínimo que se necesita de un cliente de Lucid para leer la fila. */
|
|
128
143
|
export interface CatalogVersionClient {
|
|
129
144
|
from(table: string): any;
|
|
@@ -178,34 +193,43 @@ export declare function bumpAuthzCatalogVersion(trx: CatalogVersionTransaction,
|
|
|
178
193
|
timeoutMs?: number;
|
|
179
194
|
}): Promise<void>;
|
|
180
195
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
196
|
+
* TODOS los roles LOCALES (owner ≠ `global`) leídos de la BASE, en fresco y
|
|
197
|
+
* con sus permisos.
|
|
183
198
|
*
|
|
184
|
-
* `
|
|
185
|
-
* `
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
* transacción; M4 no.
|
|
199
|
+
* Lo usa `AuthorizationManager.pruneOrphanRoles` —el motor de
|
|
200
|
+
* `authz:catalog:prune-orphans` (3b-0 · Z2)—, que necesita mirar el catálogo
|
|
201
|
+
* ENTERO: los roles cuyo owner ya no resuelve son precisamente los que nadie
|
|
202
|
+
* enumera desde el árbol (no cuelgan de ningún scope vivo), así que no hay
|
|
203
|
+
* lista de owners con la que preguntar.
|
|
190
204
|
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* un abrazo mortal con un pool de 1. Es una carrera que el tenant pierde de
|
|
195
|
-
* todas formas —define un rol en un scope que se está borrando— y la
|
|
196
|
-
* siguiente notificación (o `authz:reconcile`, 3b) lo recoge.
|
|
205
|
+
* De la BASE y no del memo: con `catalogRevalidate: { everyMs }` —config
|
|
206
|
+
* legal y documentada— la foto puede no tener lo que otro proceso acaba de
|
|
207
|
+
* confirmar (auditor A2 bis), y aquí se decide qué se BORRA.
|
|
197
208
|
*
|
|
198
209
|
* El orden es ESTABLE por `uuid` (3F · U5, tester 3E · §4.3): sin `ORDER BY`
|
|
199
|
-
* lo
|
|
200
|
-
* auditoría
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
210
|
+
* lo pone el motor, así que la lista del `--dry-run`, la secuencia de
|
|
211
|
+
* `role_purged` que ve el hook de auditoría y el rol por el que seguiría una
|
|
212
|
+
* pasada interrumpida cambiaban entre PostgreSQL, MySQL y SQLite. Con uuid
|
|
213
|
+
* v7 es además el orden de creación.
|
|
214
|
+
*
|
|
215
|
+
* **Lo que NO devuelve son los HECHOS del rol** (3b-2j). Hasta aquí contaba
|
|
216
|
+
* también sus asignaciones vigentes (3b-0b · AA1) leyendo
|
|
217
|
+
* `authz_assignments`, que es la tabla del driver `database`: con `openfga`
|
|
218
|
+
* los hechos viven en el store y ese conteo era siempre cero, así que el
|
|
219
|
+
* `stillGranting` del barrido —«falso ⇒ no concede SEGURO», leído justo
|
|
220
|
+
* antes de un borrado destructivo— mentía. Contarlos es ahora una pregunta
|
|
221
|
+
* del PUERTO (`AuthorizationDriver.countRoleAssignments`), que es de quien
|
|
222
|
+
* son los hechos.
|
|
223
|
+
*
|
|
224
|
+
* Cota `maxLocalRoles` (3b-0b · AB2, default 10 000): la lectura es una sola
|
|
225
|
+
* consulta y un catálogo local enorme la convierte en amplificación. Se pide
|
|
226
|
+
* una fila de más y, si aparece, 500 `E_AUTHZ_TOO_MANY_LOCAL_ROLES` — nunca
|
|
227
|
+
* una lista parcial, que aquí sería purgar a ciegas la mitad del catálogo.
|
|
205
228
|
*/
|
|
206
|
-
export declare function
|
|
229
|
+
export declare function readLocalRoles(options?: {
|
|
207
230
|
timeoutMs?: number;
|
|
208
231
|
driver?: string;
|
|
232
|
+
maxLocalRoles?: number;
|
|
209
233
|
}): Promise<Array<{
|
|
210
234
|
role: CatalogRole;
|
|
211
235
|
permissions: string[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog_cache.d.ts","sourceRoot":"","sources":["../../../src/catalog/catalog_cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import db from '@adonisjs/lucid/services/db';
|
|
2
|
-
import { guardSql, isAuthzError, isSqlDriverError, isTimeoutLike } from '
|
|
3
|
-
import { AmbiguousRoleError, AuthorizationBackendError, AuthorizationBackendTimeoutError, AuthorizationConfigError, AuthorizationInternalError, } from '
|
|
4
|
-
import { isValidScopeType, scopeFromKey } from '
|
|
5
|
-
import { systemClock } from '
|
|
6
|
-
import { isSqliteDialect } from '
|
|
2
|
+
import { guardSql, isAuthzError, isSqlDriverError, isTimeoutLike } from '../shared/backend_guard.js';
|
|
3
|
+
import { AmbiguousRoleError, AuthorizationBackendError, AuthorizationBackendTimeoutError, AuthorizationConfigError, AuthorizationInternalError, TooManyLocalRolesError, } from '../errors.js';
|
|
4
|
+
import { isValidScopeType, scopeFromKey } from '../identity.js';
|
|
5
|
+
import { systemClock } from '../clock.js';
|
|
6
|
+
import { isSqliteDialect } from '../shared/sql_expiry.js';
|
|
7
7
|
/**
|
|
8
8
|
* Memo del CATÁLOGO (roles, permisos y vínculos rol→permiso), y de nada más.
|
|
9
9
|
*
|
|
@@ -78,6 +78,13 @@ export function invalidateAuthzCatalog() {
|
|
|
78
78
|
}
|
|
79
79
|
/** Deadline de cada consulta de carga (el mismo default que el catálogo). */
|
|
80
80
|
export const DEFAULT_CATALOG_CACHE_TIMEOUT_MS = 5_000;
|
|
81
|
+
/**
|
|
82
|
+
* Cota por defecto de `readLocalRoles` (3b-0b · AB2): cuántos roles LOCALES
|
|
83
|
+
* puede devolver una pasada de `prune-orphans` antes de rendirse con 500.
|
|
84
|
+
* Es del mismo orden que `maxScopes`/`maxDescendants`: una lectura sin
|
|
85
|
+
* `LIMIT` sobre una tabla que el consumidor hace crecer.
|
|
86
|
+
*/
|
|
87
|
+
export const DEFAULT_MAX_LOCAL_ROLES = 10_000;
|
|
81
88
|
function describeClient(client) {
|
|
82
89
|
if (client === null)
|
|
83
90
|
return 'null';
|
|
@@ -188,54 +195,56 @@ export async function bumpAuthzCatalogVersion(trx, options = {}) {
|
|
|
188
195
|
}
|
|
189
196
|
}
|
|
190
197
|
/**
|
|
191
|
-
*
|
|
192
|
-
*
|
|
198
|
+
* TODOS los roles LOCALES (owner ≠ `global`) leídos de la BASE, en fresco y
|
|
199
|
+
* con sus permisos.
|
|
193
200
|
*
|
|
194
|
-
* `
|
|
195
|
-
* `
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
* transacción; M4 no.
|
|
201
|
+
* Lo usa `AuthorizationManager.pruneOrphanRoles` —el motor de
|
|
202
|
+
* `authz:catalog:prune-orphans` (3b-0 · Z2)—, que necesita mirar el catálogo
|
|
203
|
+
* ENTERO: los roles cuyo owner ya no resuelve son precisamente los que nadie
|
|
204
|
+
* enumera desde el árbol (no cuelgan de ningún scope vivo), así que no hay
|
|
205
|
+
* lista de owners con la que preguntar.
|
|
200
206
|
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
* un abrazo mortal con un pool de 1. Es una carrera que el tenant pierde de
|
|
205
|
-
* todas formas —define un rol en un scope que se está borrando— y la
|
|
206
|
-
* siguiente notificación (o `authz:reconcile`, 3b) lo recoge.
|
|
207
|
+
* De la BASE y no del memo: con `catalogRevalidate: { everyMs }` —config
|
|
208
|
+
* legal y documentada— la foto puede no tener lo que otro proceso acaba de
|
|
209
|
+
* confirmar (auditor A2 bis), y aquí se decide qué se BORRA.
|
|
207
210
|
*
|
|
208
211
|
* El orden es ESTABLE por `uuid` (3F · U5, tester 3E · §4.3): sin `ORDER BY`
|
|
209
|
-
* lo
|
|
210
|
-
* auditoría
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
212
|
+
* lo pone el motor, así que la lista del `--dry-run`, la secuencia de
|
|
213
|
+
* `role_purged` que ve el hook de auditoría y el rol por el que seguiría una
|
|
214
|
+
* pasada interrumpida cambiaban entre PostgreSQL, MySQL y SQLite. Con uuid
|
|
215
|
+
* v7 es además el orden de creación.
|
|
216
|
+
*
|
|
217
|
+
* **Lo que NO devuelve son los HECHOS del rol** (3b-2j). Hasta aquí contaba
|
|
218
|
+
* también sus asignaciones vigentes (3b-0b · AA1) leyendo
|
|
219
|
+
* `authz_assignments`, que es la tabla del driver `database`: con `openfga`
|
|
220
|
+
* los hechos viven en el store y ese conteo era siempre cero, así que el
|
|
221
|
+
* `stillGranting` del barrido —«falso ⇒ no concede SEGURO», leído justo
|
|
222
|
+
* antes de un borrado destructivo— mentía. Contarlos es ahora una pregunta
|
|
223
|
+
* del PUERTO (`AuthorizationDriver.countRoleAssignments`), que es de quien
|
|
224
|
+
* son los hechos.
|
|
225
|
+
*
|
|
226
|
+
* Cota `maxLocalRoles` (3b-0b · AB2, default 10 000): la lectura es una sola
|
|
227
|
+
* consulta y un catálogo local enorme la convierte en amplificación. Se pide
|
|
228
|
+
* una fila de más y, si aparece, 500 `E_AUTHZ_TOO_MANY_LOCAL_ROLES` — nunca
|
|
229
|
+
* una lista parcial, que aquí sería purgar a ciegas la mitad del catálogo.
|
|
215
230
|
*/
|
|
216
|
-
export async function
|
|
217
|
-
const owners = [...new Set(ownerKeys)].filter((key) => key !== GLOBAL_OWNER_KEY);
|
|
218
|
-
if (owners.length === 0)
|
|
219
|
-
return [];
|
|
231
|
+
export async function readLocalRoles(options = {}) {
|
|
220
232
|
const timeoutMs = options.timeoutMs ?? DEFAULT_CATALOG_CACHE_TIMEOUT_MS;
|
|
221
233
|
const driver = options.driver ?? 'catalog';
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
.
|
|
234
|
+
const maxLocalRoles = options.maxLocalRoles ?? DEFAULT_MAX_LOCAL_ROLES;
|
|
235
|
+
const rows = await guardSql(driver, 'catalog.localRoles', timeoutMs, () => db
|
|
236
|
+
.from('authz_roles')
|
|
237
|
+
.whereNot('owner_scope_key', GLOBAL_OWNER_KEY)
|
|
238
|
+
.orderBy('uuid', 'asc')
|
|
239
|
+
.limit(maxLocalRoles + 1)
|
|
240
|
+
.select('uuid', 'slug', 'scope_type', 'rank', 'owner_scope_key'));
|
|
241
|
+
if (rows.length > maxLocalRoles) {
|
|
242
|
+
throw new TooManyLocalRolesError(`El catálogo tiene más de ${maxLocalRoles} roles locales (cota 'maxLocalRoles'). No se devuelve una lista ` +
|
|
243
|
+
`parcial: quien lee esto decide qué se BORRA. Sube la cota a sabiendas si tu catálogo local es así de grande.`);
|
|
232
244
|
}
|
|
233
245
|
if (rows.length === 0)
|
|
234
246
|
return [];
|
|
235
|
-
|
|
236
|
-
// del conjunto entero se fija aquí.
|
|
237
|
-
rows.sort((a, b) => String(a.uuid).localeCompare(String(b.uuid)));
|
|
238
|
-
const links = await guardSql(driver, 'catalog.rolePermissionsOwnedBy', timeoutMs, () => db
|
|
247
|
+
const links = await guardSql(driver, 'catalog.localRolePermissions', timeoutMs, () => db
|
|
239
248
|
.from('authz_role_permissions')
|
|
240
249
|
.join('authz_permissions', 'authz_permissions.uuid', 'authz_role_permissions.permission_uuid')
|
|
241
250
|
.whereIn('authz_role_permissions.role_uuid', rows.map((row) => String(row.uuid)))
|
|
@@ -638,6 +647,7 @@ function buildCatalogView(permissions, roles, links, loadedAt, version) {
|
|
|
638
647
|
},
|
|
639
648
|
rolesNamed: (slug, scopeType) => [...(rolesByKey.get(roleKey(slug, scopeType)) ?? [])],
|
|
640
649
|
rolesOwnedBy: (ownerKey) => [...(rolesByOwner.get(ownerKey) ?? [])],
|
|
650
|
+
localRoles: () => [...rolesByOwner.values()].flat(),
|
|
641
651
|
roleByUuid: (uuid) => roleByUuid.get(uuid) ?? null,
|
|
642
652
|
rolesFor: (scopeType, ownerKeys) => {
|
|
643
653
|
const owners = new Set(ownerKeys);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog_cache.js","sourceRoot":"","sources":["../../../src/catalog/catalog_cache.ts"],"names":[],"mappings":"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"}
|