Supabase(スーパーベース・スパベース)の使い方7回目となります。
今回はこれまで作成してきたWebアプリに、管理者機能を搭載します。

管理者ユーザーなら色々できる、としておくと、ラクなんだよね~

たしかに!
なお前回までの記事を見ていない方は、まずはこちらをチェックしておいてくださいね。
管理者判定はSupabase側で実施
管理者判定を行う方法はいくつかあります。今回はSupabaseに管理者用テーブルを作り、ここに登録されたユーザーが管理者とします。
なおフロント側で管理者判定をすることも可能ですが、これだと、コードを見られる・編集されるリスクがあるので避けておきましょう。

フロント側に大事なコードを置かない!これがセキュリティ上大事なの。

フロント側ってブラウザで表示されるところよね。確かに、ここに大事なコードをいれるのは危険だわ!
Supabase上に管理者テーブルを作成
Supabaseにログインし、Database/Tablesより【New table】を選択。admin_usersというテーブルを新規作成します。

テーブルの構造は下記のようにします。idカラムを【user_id】とし、Typeは【uuid】とし、Default Valueは、nullとします。

さらに画面下の【Add foreign key relation】をクリック。次のようにauth.usersテーブルとusersテーブルとのリレーション(関係)を設定します。

管理者テーブルのポリシーを変更
作成したadmin_usersテーブルのポリシーを【Enable RLS】にします。

今回は、admin_usersテーブルは「参照にだけ使う」とします。【Create Policy】をクリックして、SELECTポリシーを次のようにいれます。

Usingに入れるコード:
|
1 |
(auth.uid() = user_id) |
これによって、ログインユーザーのユーザーID(auth.uid)と、admin_usersテーブルのuser_idカラムが一致していれば、参照できます。
つまり管理者なら自分のレコードのみ参照でき、管理者でない場合にはレコードをみることはできません。

今回はこのテーブルは参照用だけにして、Webアプリからは変更できないようにするね。

なるほど!セキュリティ上、安全そうだわ。
管理者を設定
今回はadmin_usersテーブルに手動で管理者をいれます。
Table Editor/admin_usersを表示し、【inserst】ボタンをクリック。表示されるメニューから【Insert row】を選びます。

user_id入力欄をクリックして、既存のusersから、管理者にしたいuser_idを選択します。

ポリシーに反映
これで管理者ユーザーの出来上がりです。次にこの管理者ユーザーを使って、ポリシーを作成します。
今回は、前回までに作成したitems(備品テーブル)のポリシーを編集して、「本人または管理者のみが編集可能」とします。
itemsのRLSポリシーについてはこちらの記事を参考にしてください。
Database/Table Editorよりitemsテーブルのポリシーを編集します。次のようにコードをいれます。

Usingとwithcheckに入れるコード:
|
1 2 3 |
((user_id = auth.uid()) OR (EXISTS ( SELECT 1 FROM admin_users au WHERE (au.user_id = auth.uid())))) |
Webアプリ側の変更
Webアプリにも変更を加えておきましょう。例えば、管理者または本人のみが編集可能とする場合は、次のように生成AIコーディングツール(Claude Codeなど)に指示をします。
【プロンプト例】
– 管理者かどうかの判定は public.admin_users テーブルで行います。
– admin_users.user_id にログインユーザーの auth.uid() が存在する場合、そのユーザーを管理者と判定します。
機能を搭載したら、想定どおり動くかどうか、テストをしてくださいね。
さいごに
管理者権限の実装、いかがでしたか?
今回は「管理者である/ない」のシンプルな判定にしました。分かりやすさ重視のため、管理者権限の付与はSupabase画面で行う形にしました。
ただWebアプリによっては、他の方法を検討したほうが良いでしょう。
たとえば「管理者」「編集者」「閲覧者」のように複数のロールが必要な場合は、usersテーブルにroleカラムを追加する方法などもあります。

管理者権限のつけ方は、色々あるのね。

今回はシンプルバージョンだけど、アプリの規模や要件によって最適な方法を選んでね。
Supabase講座、また時々更新したいと思うので、ご興味あれば見てくださいね。


