You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(supabase): revert owner-mismatch DO blocks in smtp_senders and whatsapp_sessions (#2840)
The DO blocks with EXCEPTION WHEN insufficient_privilege added in #2838
and #2839 let the migration runner skip CREATE INDEX, ENABLE RLS, and
CREATE POLICY when the table was owned by a different role. That made
the deploy pass while the real application code would still hit
permission denied at runtime, which is a worse failure mode than a
failing deploy.
Restore the IF NOT EXISTS / DROP IF EXISTS idempotency patterns from
#2836. The migration now fails loudly when ownership is misaligned so
the issue must be fixed out-of-band (drop and recreate the table, or
ALTER TABLE ... OWNER TO) before the migration can succeed.
Copy file name to clipboardExpand all lines: supabase/migrations/20260601000000_add_whatsapp_gateway.sql
+23-11Lines changed: 23 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -32,21 +32,33 @@ CREATE TABLE IF NOT EXISTS private.whatsapp_sessions (
32
32
);
33
33
34
34
-- Indexes
35
-
-- CREATE INDEX / CREATE POLICY on an existing table require ownership.
36
-
-- On QA the table may have been pre-applied by a role that doesn't match
37
-
-- the migration runner, so these no-op cleanly when we lack privilege.
38
-
DO $$ BEGIN CREATE INDEX idx_whatsapp_sessions_user_id ONprivate.whatsapp_sessions(user_id); EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL; END $$;
39
-
DO $$ BEGIN CREATE INDEX idx_whatsapp_sessions_status ONprivate.whatsapp_sessions(status); EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL; END $$;
40
-
DO $$ BEGIN CREATE INDEX idx_whatsapp_sessions_active ONprivate.whatsapp_sessions(is_active); EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL; END $$;
35
+
CREATEINDEXIF NOT EXISTS idx_whatsapp_sessions_user_id ONprivate.whatsapp_sessions(user_id);
36
+
CREATEINDEXIF NOT EXISTS idx_whatsapp_sessions_status ONprivate.whatsapp_sessions(status);
37
+
CREATEINDEXIF NOT EXISTS idx_whatsapp_sessions_active ONprivate.whatsapp_sessions(is_active);
41
38
42
39
-- Enable RLS
43
-
DO $$ BEGIN EXECUTE 'ALTER TABLE private.whatsapp_sessions ENABLE ROW LEVEL SECURITY'; EXCEPTION WHEN insufficient_privilege THEN NULL; END $$;
DO $$ BEGIN EXECUTE 'DROP POLICY IF EXISTS "Users can view own whatsapp sessions" ON private.whatsapp_sessions'; EXECUTE 'CREATE POLICY "Users can view own whatsapp sessions" ON private.whatsapp_sessions FOR SELECT USING (auth.uid() = user_id)'; EXCEPTION WHEN insufficient_privilege OR duplicate_object THEN NULL; END $$;
47
-
DO $$ BEGIN EXECUTE 'DROP POLICY IF EXISTS "Users can insert own whatsapp sessions" ON private.whatsapp_sessions'; EXECUTE 'CREATE POLICY "Users can insert own whatsapp sessions" ON private.whatsapp_sessions FOR INSERT WITH CHECK (auth.uid() = user_id)'; EXCEPTION WHEN insufficient_privilege OR duplicate_object THEN NULL; END $$;
48
-
DO $$ BEGIN EXECUTE 'DROP POLICY IF EXISTS "Users can update own whatsapp sessions" ON private.whatsapp_sessions'; EXECUTE 'CREATE POLICY "Users can update own whatsapp sessions" ON private.whatsapp_sessions FOR UPDATE USING (auth.uid() = user_id)'; EXCEPTION WHEN insufficient_privilege OR duplicate_object THEN NULL; END $$;
49
-
DO $$ BEGIN EXECUTE 'DROP POLICY IF EXISTS "Users can delete own whatsapp sessions" ON private.whatsapp_sessions'; EXECUTE 'CREATE POLICY "Users can delete own whatsapp sessions" ON private.whatsapp_sessions FOR DELETE USING (auth.uid() = user_id)'; EXCEPTION WHEN insufficient_privilege OR duplicate_object THEN NULL; END $$;
43
+
DROP POLICY IF EXISTS "Users can view own whatsapp sessions"ONprivate.whatsapp_sessions;
44
+
CREATE POLICY "Users can view own whatsapp sessions"
45
+
ONprivate.whatsapp_sessions FOR SELECT
46
+
USING (auth.uid() = user_id);
47
+
48
+
DROP POLICY IF EXISTS "Users can insert own whatsapp sessions"ONprivate.whatsapp_sessions;
49
+
CREATE POLICY "Users can insert own whatsapp sessions"
50
+
ONprivate.whatsapp_sessions FOR INSERT
51
+
WITH CHECK (auth.uid() = user_id);
52
+
53
+
DROP POLICY IF EXISTS "Users can update own whatsapp sessions"ONprivate.whatsapp_sessions;
54
+
CREATE POLICY "Users can update own whatsapp sessions"
55
+
ONprivate.whatsapp_sessions FOR UPDATE
56
+
USING (auth.uid() = user_id);
57
+
58
+
DROP POLICY IF EXISTS "Users can delete own whatsapp sessions"ONprivate.whatsapp_sessions;
59
+
CREATE POLICY "Users can delete own whatsapp sessions"
60
+
ONprivate.whatsapp_sessions FOR DELETE
61
+
USING (auth.uid() = user_id);
50
62
51
63
-- Trigger to automatically update updated_at
52
64
CREATE OR REPLACEFUNCTIONprivate.update_whatsapp_session_updated_at()
0 commit comments