Skip to content

Commit 4b3cef2

Browse files
authored
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.
1 parent 99b18ec commit 4b3cef2

2 files changed

Lines changed: 30 additions & 32 deletions

File tree

supabase/migrations/20260530120000_add_smtp_senders.sql

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,12 @@ CREATE TABLE IF NOT EXISTS private.smtp_senders (
1818
UNIQUE(user_id, email)
1919
);
2020

21-
-- CREATE INDEX / CREATE POLICY / ENABLE RLS on an existing table require
22-
-- ownership. On QA the table may have been pre-applied by a role that
23-
-- doesn't match the migration runner, so these no-op cleanly when we lack
24-
-- privilege. Whoever pre-applied the table is responsible for the
25-
-- index / RLS / policy.
26-
DO $$
27-
BEGIN
28-
CREATE INDEX idx_smtp_senders_user_id ON private.smtp_senders(user_id);
29-
EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL;
30-
END $$;
21+
CREATE INDEX IF NOT EXISTS idx_smtp_senders_user_id ON private.smtp_senders(user_id);
3122

32-
DO $$
33-
BEGIN
34-
EXECUTE 'ALTER TABLE private.smtp_senders ENABLE ROW LEVEL SECURITY';
35-
EXCEPTION WHEN insufficient_privilege THEN NULL;
36-
END $$;
23+
ALTER TABLE private.smtp_senders ENABLE ROW LEVEL SECURITY;
3724

38-
DO $$
39-
BEGIN
40-
EXECUTE 'DROP POLICY IF EXISTS "Users can manage own smtp_senders" ON private.smtp_senders';
41-
EXECUTE 'CREATE POLICY "Users can manage own smtp_senders" ON private.smtp_senders USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id)';
42-
EXCEPTION WHEN insufficient_privilege OR duplicate_object THEN NULL;
43-
END $$;
25+
DROP POLICY IF EXISTS "Users can manage own smtp_senders" ON private.smtp_senders;
26+
CREATE POLICY "Users can manage own smtp_senders"
27+
ON private.smtp_senders
28+
USING (auth.uid() = user_id)
29+
WITH CHECK (auth.uid() = user_id);

supabase/migrations/20260601000000_add_whatsapp_gateway.sql

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,33 @@ CREATE TABLE IF NOT EXISTS private.whatsapp_sessions (
3232
);
3333

3434
-- 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 ON private.whatsapp_sessions(user_id); EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL; END $$;
39-
DO $$ BEGIN CREATE INDEX idx_whatsapp_sessions_status ON private.whatsapp_sessions(status); EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL; END $$;
40-
DO $$ BEGIN CREATE INDEX idx_whatsapp_sessions_active ON private.whatsapp_sessions(is_active); EXCEPTION WHEN insufficient_privilege OR duplicate_table THEN NULL; END $$;
35+
CREATE INDEX IF NOT EXISTS idx_whatsapp_sessions_user_id ON private.whatsapp_sessions(user_id);
36+
CREATE INDEX IF NOT EXISTS idx_whatsapp_sessions_status ON private.whatsapp_sessions(status);
37+
CREATE INDEX IF NOT EXISTS idx_whatsapp_sessions_active ON private.whatsapp_sessions(is_active);
4138

4239
-- Enable RLS
43-
DO $$ BEGIN EXECUTE 'ALTER TABLE private.whatsapp_sessions ENABLE ROW LEVEL SECURITY'; EXCEPTION WHEN insufficient_privilege THEN NULL; END $$;
40+
ALTER TABLE private.whatsapp_sessions ENABLE ROW LEVEL SECURITY;
4441

4542
-- RLS Policies for whatsapp_sessions
46-
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" ON private.whatsapp_sessions;
44+
CREATE POLICY "Users can view own whatsapp sessions"
45+
ON private.whatsapp_sessions FOR SELECT
46+
USING (auth.uid() = user_id);
47+
48+
DROP POLICY IF EXISTS "Users can insert own whatsapp sessions" ON private.whatsapp_sessions;
49+
CREATE POLICY "Users can insert own whatsapp sessions"
50+
ON private.whatsapp_sessions FOR INSERT
51+
WITH CHECK (auth.uid() = user_id);
52+
53+
DROP POLICY IF EXISTS "Users can update own whatsapp sessions" ON private.whatsapp_sessions;
54+
CREATE POLICY "Users can update own whatsapp sessions"
55+
ON private.whatsapp_sessions FOR UPDATE
56+
USING (auth.uid() = user_id);
57+
58+
DROP POLICY IF EXISTS "Users can delete own whatsapp sessions" ON private.whatsapp_sessions;
59+
CREATE POLICY "Users can delete own whatsapp sessions"
60+
ON private.whatsapp_sessions FOR DELETE
61+
USING (auth.uid() = user_id);
5062

5163
-- Trigger to automatically update updated_at
5264
CREATE OR REPLACE FUNCTION private.update_whatsapp_session_updated_at()

0 commit comments

Comments
 (0)