我正在使用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';
$$穩定的語言 sql安全定義器。
創建策略 "用戶可以閱讀他們是編輯或瀏覽者的基地"
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"/span>,
{ user_id: "ddddde6-1111-4bdf-aaaa-33336ccc31ee", allow_edit: true }
)
.then(console.log) // => bad。
最大限度地減少資訊泄露的機會對于最大限度地提高應用程式的安全性和用戶的隱私總是很重要的。
uj5u.com熱心網友回復:
你不能以這種方式限制函式的權限,因為運行查詢的用戶必須能夠執行它。
我認為有兩種方法可以改進:
從函式中省略第一個引數,這樣它就只能給出當前用戶的結果。然后,沒有人可以看到其他用戶的資訊。
除此之外,你還可以將
bases.id作為一個函式引數,并讓函式回傳一個boolean。然后你就不能得到一個串列,但是性能可能會受到影響,因為該函式必須為每一行都被呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/324731.html
標籤:
