Corrige os testes de RLS e auditoria contra PostgreSQL real
A verificação de FORCE RLS lia pg_class sem filtrar relkind e pegava índices como spreadsheet_adapter_settings_pkey, que nunca têm RLS. Agora lê só tabelas (r/p) do schema public e compara com a lista exata das dez tabelas protegidas pela 0003_rls.sql. O teste de auditoria reutilizava $1 como uuid (workspace_id) e text (resource_id), e o Postgres recusava antes de testar a permissão. Cada coluna tem seu parâmetro e o teste exige o código 42501 em update e delete, confirmando que o registro continua intacto. Regressão do catálogo de RLS também roda na suíte padrão (PGlite). Nenhuma migration, política ou permissão foi alterada. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b8586ba0aa
commit
84ad5c4757
3 files changed
+75
-12
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createModel } from "@/server/spreadsheet-adapter/service";
|
||||
import { ctxOf, createReadyDb, depsOf, IDS } from "../helpers/world";
|
||||
import { readRlsCatalog, RLS_TABLES } from "../helpers/rls-catalog";
|
||||
|
||||
describe("RLS e permissões", () => {
|
||||
it("impede leitura e escrita entre workspaces", async () => {
|
||||
@@ -71,4 +72,16 @@ describe("RLS e permissões", () => {
|
||||
expect(rows.every((row) => row.action !== "tamper")).toBe(true);
|
||||
await db.close();
|
||||
});
|
||||
|
||||
it("verifica RLS e FORCE RLS só em tabelas, nunca em índices", async () => {
|
||||
const db = await createReadyDb();
|
||||
const rows = await db.withService(readRlsCatalog);
|
||||
expect(rows.map((row) => row.relname)).toEqual([...RLS_TABLES]);
|
||||
expect(rows.some((row) => row.relname.endsWith("_pkey"))).toBe(false);
|
||||
for (const row of rows) {
|
||||
expect(row.relrowsecurity, `${row.relname} sem RLS`).toBe(true);
|
||||
expect(row.relforcerowsecurity, `${row.relname} sem FORCE RLS`).toBe(true);
|
||||
}
|
||||
await db.close();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user