問題
supabaseにデータを登録したところ、エラーが出て登録できない。
Chromeのデベロッパーツールツールで、確認すると以下エラーとなっていた。
- 406 Not Acceptable エラー
- 403 Forbidden エラー
前提条件
Enable Row Level Security(RLS)を有効にしている。
RLSとは(copilotで確認)
SupabaseのRLS(Row Level Security/行レベルセキュリティ)とは、データベースの各行ごとに「誰がアクセスできるか」を制御できるセキュリティ機能。
解決方法
テーブルごとに、SQLで「ポリシー(条件)」を設定する。
ポリシー(条件)はPostgreSQL標準の機能で、Supabaseでもそのまま利用できる。
たとえば、「ログインユーザーは自分のuser_idのデータだけ読める」「未ログインユーザーはuser_idがnullのデータだけ読める」など、柔軟なアクセス制御が可能。
- Supabaseプロジェクトのダッシュボードにログイン
- 左メニューから「SQL Editor(SQLエディタ)」を選択
- 「New Query(新しいクエリ)」をクリック
下記のSQLを貼り付けて「Run(実行)」ボタンを押す。
.sql
-- 例: 自分のuser_idのレコードだけSELECT/INSERTことができる
-- (ALLなのでUPDATE, DELETEもできる)
CREATE POLICY "Users can manage their own profiles"
ON user_profiles
FOR ALL
USING (auth.uid() = user_id);
終わりに
RLSがよくわからなかったのですが、理解できました。