57 lines
2.0 KiB
PL/PgSQL
57 lines
2.0 KiB
PL/PgSQL
begin;
|
|
|
|
create table if not exists public.chart_profiles (
|
|
id uuid primary key default gen_random_uuid(),
|
|
user_id uuid not null references auth.users(id) on delete cascade,
|
|
role text not null default 'other' check (role in ('self', 'other')),
|
|
profile jsonb not null check (jsonb_typeof(profile) = 'object'),
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
create index if not exists chart_profiles_user_updated_at_idx
|
|
on public.chart_profiles (user_id, updated_at desc);
|
|
|
|
create unique index if not exists chart_profiles_one_self_per_user_idx
|
|
on public.chart_profiles (user_id)
|
|
where role = 'self';
|
|
|
|
alter table public.chart_profiles enable row level security;
|
|
|
|
drop policy if exists chart_profiles_select_own on public.chart_profiles;
|
|
create policy chart_profiles_select_own
|
|
on public.chart_profiles
|
|
for select
|
|
to authenticated
|
|
using ((select auth.uid()) = user_id);
|
|
|
|
drop policy if exists chart_profiles_insert_own on public.chart_profiles;
|
|
create policy chart_profiles_insert_own
|
|
on public.chart_profiles
|
|
for insert
|
|
to authenticated
|
|
with check ((select auth.uid()) = user_id);
|
|
|
|
drop policy if exists chart_profiles_update_own on public.chart_profiles;
|
|
create policy chart_profiles_update_own
|
|
on public.chart_profiles
|
|
for update
|
|
to authenticated
|
|
using ((select auth.uid()) = user_id)
|
|
with check ((select auth.uid()) = user_id);
|
|
|
|
drop policy if exists chart_profiles_delete_own on public.chart_profiles;
|
|
create policy chart_profiles_delete_own
|
|
on public.chart_profiles
|
|
for delete
|
|
to authenticated
|
|
using ((select auth.uid()) = user_id);
|
|
|
|
revoke all on table public.chart_profiles from anon, authenticated, service_role;
|
|
grant select on table public.chart_profiles to authenticated;
|
|
grant insert (id, user_id, role, profile, updated_at) on table public.chart_profiles to authenticated;
|
|
grant update (role, profile, updated_at) on table public.chart_profiles to authenticated;
|
|
grant delete on table public.chart_profiles to authenticated;
|
|
|
|
commit;
|