「サーバーレス」アプリケーション用に、supabase.io で RLS (Row Level Security) を使用しています。RLS ポリシーには、さまざまなセキュリティ定義関数を使用する必要があります。これらは引き続き、supabase の rpc ライブラリを介して呼び出すことができます。これらの関数の呼び出しを管理者 (私) または RLS ポリシーの一部として使用する場合に制限する方法はありますか?
例えば:
CREATE OR REPLACE FUNCTION get_bases_editable_or_viewable_for_user(user_id uuid, allow_edit bool)
returns setof bigint as $$
select base_id
from access_controls
where access_controls.user_id = $1 AND ($2 AND access_controls.access_level = 'editor') OR access_controls.access_level = 'viewer';
$$ stable language sql security definer;
CREATE policy "Users can read bases they are editors or viewers of"
on public.bases
for select using ( bases.id in (get_bases_editable_or_viewable_for_user(auth.uid(), true)) );
get_bases_editable_or_viewable_for_user
別のユーザーの UID を取得したユーザーは、このユーザーが編集者または閲覧者としてアクセスできる UID を見つけることができます。
supabase.rpc(
"get_bases_editable_or_viewable_for_user",
{ user_id: "dddddde6-1111-4bdf-aaaa-33336ccc31ee", allow_edit: true }
)
.then(console.log) // => bad
アプリケーションのセキュリティとユーザーのプライバシーを最大限に高めるには、情報漏えいの機会を最小限に抑えることが常に重要です。