我将 RLS(行级安全性)与 supabase.io 一起用于“无服务器”应用程序。我必须为 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
最大限度地减少信息泄露的机会对于最大限度地提高应用程序的安全性和用户的隐私至关重要。