59 lines
1.3 KiB
SQL
59 lines
1.3 KiB
SQL
create table public.blog_entries (
|
|
id bigint primary key generated always as identity,
|
|
author_id uuid not null references auth.users (id),
|
|
date text not null,
|
|
title text not null,
|
|
description text,
|
|
slug text unique not null,
|
|
image text,
|
|
content jsonb default '[]'::jsonb,
|
|
created_at timestamp with time zone default now(),
|
|
updated_at timestamp with time zone default now()
|
|
);
|
|
|
|
create index idx_blog_entries_author_id on public.blog_entries (author_id);
|
|
|
|
alter table public.blog_entries ENABLE row LEVEL SECURITY;
|
|
|
|
create policy "Public select" on public.blog_entries for
|
|
select
|
|
to anon using (true);
|
|
|
|
create policy "Authenticated insert" on public.blog_entries for INSERT to authenticated
|
|
with
|
|
check (
|
|
(
|
|
select
|
|
auth.uid ()
|
|
)::uuid = author_id
|
|
);
|
|
|
|
create policy "Author update" on public.blog_entries
|
|
for update
|
|
to authenticated using (
|
|
(
|
|
select
|
|
auth.uid ()
|
|
)::uuid = author_id
|
|
)
|
|
with
|
|
check (
|
|
(
|
|
select
|
|
auth.uid ()
|
|
)::uuid = author_id
|
|
);
|
|
|
|
create policy "Author delete" on public.blog_entries for DELETE to authenticated using (
|
|
(
|
|
select
|
|
auth.uid ()
|
|
)::uuid = author_id
|
|
);
|
|
|
|
grant select on public.blog_entries to anon;
|
|
|
|
grant INSERT, update, DELETE on public.blog_entries to authenticated;
|
|
|
|
grant USAGE, select on SEQUENCE public.blog_entries_id_seq to authenticated;
|