@juliobrim/prisma-shared 1.0.52 → 1.0.53
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.
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
-- RLS multi-tenant - onda 1
|
|
2
|
+
--
|
|
3
|
+
-- Este arquivo prepara as tabelas tenant-scoped mais criticas para isolamento
|
|
4
|
+
-- definitivo no PostgreSQL. Ele deve ser portado para a origem do pacote
|
|
5
|
+
-- shared Prisma e executado como migration SQL, nao aplicado manualmente em
|
|
6
|
+
-- node_modules.
|
|
7
|
+
--
|
|
8
|
+
-- Pre-requisitos:
|
|
9
|
+
-- 1. As tabelas abaixo devem ter "tenantId" NOT NULL.
|
|
10
|
+
-- 2. A aplicacao deve abrir transacoes com:
|
|
11
|
+
-- SELECT set_config('app.tenant_id', '<tenant-id>', true);
|
|
12
|
+
-- 3. O usuario tecnico do banco nao deve ter BYPASSRLS.
|
|
13
|
+
--
|
|
14
|
+
-- Rollout sugerido:
|
|
15
|
+
-- 1. Subir a aplicacao ja usando withTenantRlsTransaction().
|
|
16
|
+
-- 2. Aplicar esta migration em staging.
|
|
17
|
+
-- 3. Validar fluxos de leitura/escrita e acessos cross-tenant.
|
|
18
|
+
-- 4. Aplicar em producao por janela controlada.
|
|
19
|
+
|
|
20
|
+
BEGIN;
|
|
21
|
+
|
|
22
|
+
CREATE OR REPLACE FUNCTION app_current_tenant_id()
|
|
23
|
+
RETURNS text
|
|
24
|
+
LANGUAGE sql
|
|
25
|
+
STABLE
|
|
26
|
+
AS $$
|
|
27
|
+
SELECT NULLIF(current_setting('app.tenant_id', true), '');
|
|
28
|
+
$$;
|
|
29
|
+
|
|
30
|
+
DO $$
|
|
31
|
+
DECLARE
|
|
32
|
+
tenant_tables text[] := ARRAY[
|
|
33
|
+
'flow',
|
|
34
|
+
'machine',
|
|
35
|
+
'node',
|
|
36
|
+
'operation',
|
|
37
|
+
'operator',
|
|
38
|
+
'panel',
|
|
39
|
+
'product',
|
|
40
|
+
'production_node',
|
|
41
|
+
'production_order',
|
|
42
|
+
'report',
|
|
43
|
+
'resource',
|
|
44
|
+
'Role',
|
|
45
|
+
'sector',
|
|
46
|
+
'shift',
|
|
47
|
+
'user'
|
|
48
|
+
];
|
|
49
|
+
table_name text;
|
|
50
|
+
BEGIN
|
|
51
|
+
FOREACH table_name IN ARRAY tenant_tables LOOP
|
|
52
|
+
EXECUTE format('ALTER TABLE %I ENABLE ROW LEVEL SECURITY', table_name);
|
|
53
|
+
EXECUTE format('ALTER TABLE %I FORCE ROW LEVEL SECURITY', table_name);
|
|
54
|
+
|
|
55
|
+
EXECUTE format('DROP POLICY IF EXISTS %I ON %I', table_name || '_tenant_select', table_name);
|
|
56
|
+
EXECUTE format(
|
|
57
|
+
'CREATE POLICY %I ON %I FOR SELECT USING ("tenantId" = app_current_tenant_id())',
|
|
58
|
+
table_name || '_tenant_select',
|
|
59
|
+
table_name
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
EXECUTE format('DROP POLICY IF EXISTS %I ON %I', table_name || '_tenant_insert', table_name);
|
|
63
|
+
EXECUTE format(
|
|
64
|
+
'CREATE POLICY %I ON %I FOR INSERT WITH CHECK ("tenantId" = app_current_tenant_id())',
|
|
65
|
+
table_name || '_tenant_insert',
|
|
66
|
+
table_name
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
EXECUTE format('DROP POLICY IF EXISTS %I ON %I', table_name || '_tenant_update', table_name);
|
|
70
|
+
EXECUTE format(
|
|
71
|
+
'CREATE POLICY %I ON %I FOR UPDATE USING ("tenantId" = app_current_tenant_id()) WITH CHECK ("tenantId" = app_current_tenant_id())',
|
|
72
|
+
table_name || '_tenant_update',
|
|
73
|
+
table_name
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
EXECUTE format('DROP POLICY IF EXISTS %I ON %I', table_name || '_tenant_delete', table_name);
|
|
77
|
+
EXECUTE format(
|
|
78
|
+
'CREATE POLICY %I ON %I FOR DELETE USING ("tenantId" = app_current_tenant_id())',
|
|
79
|
+
table_name || '_tenant_delete',
|
|
80
|
+
table_name
|
|
81
|
+
);
|
|
82
|
+
END LOOP;
|
|
83
|
+
END $$;
|
|
84
|
+
|
|
85
|
+
COMMIT;
|
package/package.json
CHANGED
package/schema.prisma
CHANGED
|
@@ -1073,6 +1073,8 @@ model ProductivityIntervalCache {
|
|
|
1073
1073
|
@@index([tenantId, machineId, groupStartTimestamp])
|
|
1074
1074
|
@@index([operatorId, groupStartTimestamp])
|
|
1075
1075
|
@@index([operationId])
|
|
1076
|
+
@@index([operatorId, groupEndTimestamp], map: "pic_operator_end_idx")
|
|
1077
|
+
@@index([tenantId, operatorId, groupEndTimestamp], map: "pic_tenant_operator_end_idx")
|
|
1076
1078
|
@@map("productivity_interval_cache")
|
|
1077
1079
|
}
|
|
1078
1080
|
|