supabase 用户仅插入一行的策略

supabase policy for users to insert only one row

提问人:tamim abweini 提问时间:11/12/2023 更新时间:11/13/2023 访问量:22

问:

我有一个表“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 方面很弱,不确定我在这里做错了什么

PostgreSQL supabase

评论


答:

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;