Initial commit of akmon project
This commit is contained in:
80
doc_chat/rt.sql
Normal file
80
doc_chat/rt.sql
Normal file
@@ -0,0 +1,80 @@
|
||||
-- allow senders to read their own messages
|
||||
create policy "messages_select_sender"
|
||||
on public.chat_messages
|
||||
for select
|
||||
using (sender_id = auth.uid());
|
||||
|
||||
-- allow other conversation members to read messages
|
||||
create policy "messages_select_members"
|
||||
on public.chat_messages
|
||||
for select
|
||||
using (
|
||||
exists (
|
||||
select 1
|
||||
from public.chat_participants p
|
||||
where p.conversation_id = chat_messages.conversation_id
|
||||
and p.user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- ===============================
|
||||
-- Full setup for realtime listening via Supabase Realtime Inspector
|
||||
|
||||
-- Make sure we have uuid helpers for primary keys
|
||||
create extension if not exists "pgcrypto";
|
||||
|
||||
create table if not exists public.ak_test (
|
||||
id uuid primary key default gen_random_uuid(),
|
||||
owner_id uuid default auth.uid(),
|
||||
payload jsonb default '{}'::jsonb,
|
||||
created_at timestamptz not null default timezone('utc', now())
|
||||
);
|
||||
|
||||
comment on table public.ak_test is 'Scratch table for realtime policy tests';
|
||||
|
||||
-- Register the table with the realtime publication (idempotent)
|
||||
do $$
|
||||
begin
|
||||
if not exists (
|
||||
select 1
|
||||
from pg_publication_tables
|
||||
where pubname = 'supabase_realtime'
|
||||
and schemaname = 'public'
|
||||
and tablename = 'ak_test'
|
||||
) then
|
||||
alter publication supabase_realtime add table public.ak_test;
|
||||
end if;
|
||||
end $$;
|
||||
|
||||
-- ===============================
|
||||
-- Reset helper: disable and recreate policies scoped to the `public` role
|
||||
|
||||
alter table public.ak_test disable row level security;
|
||||
|
||||
drop policy if exists "ak_test_insert_owner" on public.ak_test;
|
||||
drop policy if exists "ak_test_select_all" on public.ak_test;
|
||||
drop policy if exists "ak_test_select_owner" on public.ak_test;
|
||||
|
||||
alter table public.ak_test enable row level security;
|
||||
|
||||
create policy "ak_test_insert_owner"
|
||||
on public.ak_test
|
||||
for insert
|
||||
to public
|
||||
with check (owner_id = auth.uid());
|
||||
|
||||
create policy "ak_test_select_all"
|
||||
on public.ak_test
|
||||
for select
|
||||
to public
|
||||
using (true);
|
||||
|
||||
create policy "ak_test_select_owner"
|
||||
on public.ak_test
|
||||
for select
|
||||
to public
|
||||
using (owner_id = auth.uid());
|
||||
|
||||
-- To remove test data quickly
|
||||
truncate table public.ak_test;
|
||||
|
||||
Reference in New Issue
Block a user