@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;
@@ -0,0 +1,5 @@
1
+ -- CreateIndex
2
+ CREATE INDEX "pic_operator_end_idx" ON "productivity_interval_cache"("operatorId", "group_end_timestamp");
3
+
4
+ -- CreateIndex
5
+ CREATE INDEX "pic_tenant_operator_end_idx" ON "productivity_interval_cache"("tenantId", "operatorId", "group_end_timestamp");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juliobrim/prisma-shared",
3
- "version": "1.0.52",
3
+ "version": "1.0.53",
4
4
  "description": "Schema Prisma compartilhado entre projetos Sabcon",
5
5
  "main": "schema.prisma",
6
6
  "files": [
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