postgresql 允许用户只插入一行的支持策略

ccrfmcuu  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(108)

我有一个带有user_id列和policy_id列的表“policies_views”,我试图创建一个策略,以防止在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方面很弱,不知道我在这里做错了什么

ltqd579y

ltqd579y1#

我通过将函数的安全性设置为Definer并使用此函数定义来使其工作

BEGIN
    RETURN NOT (SELECT (EXISTS (
        SELECT 1
        FROM policies_views
        WHERE user_id = $1 AND policy_id = $2 
    )));
END;

字符串

相关问题