Closed14
SupabaseでRow Level Securityを使って認証を実装する
動画を見ながら理解を深めます。
アーキテクチャ
RLSがない場合
RLSの場合
テーブル
postテーブル
- id
- content
- user_id
- created_at
- is_published
commentテーブル
- id
- content
- user_id
- created_at
- post_id
自分のPostだけすべての操作ができるようにする。
create policy "Enable all actions for users based on user_id"
on public.post for all
using ( auth.uid() = user_id )
with check ( auth.uid() = user_id );
公開したPostは誰でもみれる
create policy "Enable user to select a published post"
on public.post for select
using ( is_published = true );
Postを見られるユーザはコメントも見られるようにする。
create policy "Enable user to view comments for posts they can view"
on public.users for select
using (
exists (
select 1 from post where post.id = comment.post_id
)
);
こちら対象のテーブルに誤りがあるかもです!
自分が見られるPostにコメントをかける。
create policy "Allow users to insert comments on posts they can see"
on public.comment for insert
with check (
exists (
select 1 from post where post.id = comment.post_id
)
);
自分が書いたコメントは更新できる。
create policy "Update comment that we can view post for and that we onw"
on public.comment for update
with check (
exists (
select 1 from post where post.id = comment.post_id
)
);
こちらもこの状態だとpostが閲覧できる人全員が更新できる状態になってしまっているかもです!
自身が書いたコメントは削除できる。
create policy "Delete comment that we can view post for and that we onw"
on public.comment for delete
with check (
exists (
select 1 from post where post.id = comment.post_id
)
);
こちらも上記と同じかもです!
Postの所有者はコメントを削除できる。
create policy "user can moderate comments on their posts"
on public.comment for delete
using (
auth.uid() in (
select user_id from post where post.id = comment.post_id
)
);
記事としてまとめたました。
このスクラップは2021/12/14にクローズされました