我正在進入Supabase并練習我正在制作一個 suuuper 簡化的網站構建器。
但是,我在行級安全策略方面遇到了麻煩。
我有三個表:
- 用戶→ 帶有用戶資訊,如名字、姓氏等。
- 網站→ 所有網站
- user_website → 包含哪個網站屬于哪個人的資訊(因為一個網站可以被多個用戶擁有/編輯)
| 用戶 |
|---|
| 用戶身份 |
| ... |
| 網站 |
|---|
| 網站 ID |
| ... |
| 用戶網站 |
|---|
| 用戶身份 |
| 網站 ID |
| 用戶角色 |
| ... |
我沒有找到任何有用的資源,因為老實說,我仍然缺乏知道如何正確搜索所需內容的知識。
我只找到了簡單的運算式,如(uid() = user_id),但由于“權限”存盤在另一個表中,我不知道如何訪問它。
我使用了如下查詢,但它沒有按預期作業:
SELECT
*
FROM
user_website as uw
JOIN website as w
ON uw.website_id = w.website_id
WHERE
uw.user_id = auth.uid()
非常感謝幫助 - 謝謝!
uj5u.com熱心網友回復:
您可以定義這樣的策略:
CREATE POLICY may_edit ON website
FOR UPDATE TO PUBLIC
USING (EXISTS
(SELECT 1 FROM user_website
WHERE user_website.website_id = website.website_id
AND user_website.user_id = uid()
)
);
這uid()是一個回傳您當前用戶 ID 的函式。
該政策將允許每個人修改自己的網站。
uj5u.com熱心網友回復:
我打電話給朋友尋求幫助,他指出了Supabase 檔案中關于“連接策略”的部分……但它仍然對我不起作用。
原因是表格網站上的RLS-policy 參考了表格 user-website,它不允許用戶訪問任何內容。
解決方案
在網站上選擇的 RLS 政策:
auth.uid() in (
select user_id from user_website
where website_id = website.website_id
)
在用戶網站上選擇的 RLS 政策:
auth.uid() = user_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361560.html
標籤:PostgreSQL的 行级安全 超基地
上一篇:SQL欄位型別是否區分大小寫
