Supabaseとは07:社内備品管理アプリに管理者権限を追加してみよう

外注ゼロで始める社内アプリ内製講座 〜 Supabaseで作る認証付き備品管理アプリ実践

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に入れるコード:

これによって、ログインユーザーのユーザー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に入れるコード:

Webアプリ側の変更

Webアプリにも変更を加えておきましょう。例えば、管理者または本人のみが編集可能とする場合は、次のように生成AIコーディングツール(Claude Codeなど)に指示をします。

【プロンプト例】

– 編集は「本人または管理者」のみ可能としてください。
– 管理者かどうかの判定は public.admin_users テーブルで行います。
– admin_users.user_id にログインユーザーの auth.uid() が存在する場合、そのユーザーを管理者と判定します。

機能を搭載したら、想定どおり動くかどうか、テストをしてくださいね。

さいごに

管理者権限の実装、いかがでしたか?

今回は「管理者である/ない」のシンプルな判定にしました。分かりやすさ重視のため、管理者権限の付与はSupabase画面で行う形にしました。

ただWebアプリによっては、他の方法を検討したほうが良いでしょう。

たとえば「管理者」「編集者」「閲覧者」のように複数のロールが必要な場合は、usersテーブルにroleカラムを追加する方法などもあります。

くまみ
くまみ

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

今回はシンプルバージョンだけど、アプリの規模や要件によって最適な方法を選んでね。

Supabase講座、また時々更新したいと思うので、ご興味あれば見てくださいね。

 

 

タイトルとURLをコピーしました