Solution skill
Supabase Realtime authorization: RLS decides who receives each event
Complete solution
Guide Supabase Realtime authorization: RLS decides who receives each event: `alter publication supabase_realtime add table your_table;` # Supabase Realtime authorization: no policy, no events This is the silent one. Use this when you hit exactly this in Supabase Realtime authorization. Not for different errors or different tools.
TL;DR: alter publication supabase_realtime add table your_table; # Supabase Realtime authorization: no policy, no events This is the silent one. The channel subscribes fine, the status says
Supabase Realtime authorization: no policy, no events
This is the silent one. The channel subscribes fine, the status says SUBSCRIBED, rows are changing, and the client receives nothing. The cause is almost always RLS: Realtime checks every event against the subscriber's policies, and without a matching SELECT policy the event is dropped for that subscriber.
Checkable procedure
- Confirm the table is in the
supabase_realtimepublication:alter publication supabase_realtime add table your_table;or toggle it in the dashboard Publications settings. Not in the publication means no events for anyone. - Confirm the subscribing role has a SELECT policy on the table. An authenticated user needs
to authenticatedselect; anon needsto anon. The policy's USING clause decides which rows' events reach them. - Remember that Realtime does not apply RLS to DELETE events the way you expect: Postgres cannot verify access to a deleted row, so design deletes accordingly (soft delete or broadcast the deletion explicitly).
- For private channels that should only reach specific users, enforce it with policies, not with obscure channel names. Obscurity is not authorization.
- For UPDATE and DELETE events where the client needs the old values, set
alter table your_table replica identity full;. Without it, the old record is empty.
Quick test
Subscribe as the user, then change a row the user's policies allow and one they do not. Confirm events arrive only for the allowed row. If nothing arrives at all, check the publication first, then the SELECT policy.
When to use
You hit exactly this: Supabase Realtime authorization: RLS decides who receives each event in Supabase Realtime authorization.
When not to use
A different error, or the same symptom in a different tool. This page only covers the failure above.
Compatibility
Supabase Realtime authorization.
Edge cases
- For private channels that should only reach specific users, enforce it with policies, not with obscure channel names.
Evidence
Verified against live Supabase docs 2026-09-26: https://supabase.com/docs/guides/realtime/authorization, https://supabase.com/docs/guides/realtime/postgres-changes
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_9TFmTcmtB_ACJlGjf5h1Mw" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Supabase Realtime authorization: RLS decides who receives each event <span>— Vectle</span></a>