提问人:tamim abweini 提问时间:11/12/2023 更新时间:11/13/2023 访问量:22
supabase 用户仅插入一行的策略
supabase policy for users to insert only one row
问:
我有一个表“policies_views”,其中包含user_id列和policy_id列,我正在尝试创建一个策略,以防止在 user_id = auth.id() 和 class_id = request.class_id 时插入记录。
我创建了这个函数“can_create_view”
DECLARE
record_exists BOOLEAN;
BEGIN
-- Check if a record exists with the provided user_id and policy_id
SELECT EXISTS (
SELECT 1
FROM policies_views
WHERE policies_views.user_id = auth.uid() AND policies_views.policy_id = policyid
) INTO record_exists;
-- Return true if no record exists, false otherwise
RETURN NOT record_exists;
END;
我正在使用此函数创建一个新策略“用户只能为每个策略创建一个视图”,用于插入和检查 can_create_view(policy_id)
我总是得到
{
"code": "42501",
"details": null,
"hint": null,
"message": "new row violates row-level security policy for table \"policies_views\""
}
我在 sql 方面很弱,不确定我在这里做错了什么
答:
0赞
tamim abweini
11/13/2023
#1
我通过将函数的安全性设置为并使用此函数定义来使其工作Definer
BEGIN
RETURN NOT (SELECT (EXISTS (
SELECT 1
FROM policies_views
WHERE user_id = $1 AND policy_id = $2
)));
END;
评论