如何在带有RLS的表中插入表格,然后在将记录链接到用户之前将ID插入?

问题描述 投票:0回答:1

使用supabase/postgres,我有3张表。

auth.users
public.boards
public.user_boards

当用户创建一个新的板时,我需要将记录插入

public.boards

并返回
id
,以便我可以在
public.user_boards
中创建一个新记录,以显示用户拥有该板。
但使用RLS启用,用户无法从董事会中选择并获取刚创建的ID。

const { data: newBoard, error } = await supabase .from('boards') .insert([{ title: newBoardTitle.trim() }]) .select() // <--- this fails unless I allow all users to select everything .single()

您使用supabase/postgresql,并且在表上启用了行级安全性(RLS)。您面临的问题是,当您插入新记录时,您想在通过rls.
postgresql supabase rls
1个回答
0
投票
示例查询:

sql 复制 插入your_table(Column1,column2) 值('value1','value2') 返回的ID; 处理行链接:如果该行必须与用户关联或以后链接到某些特定的用户上下文(例如,在使用RLS之后),则可能需要插入记录并更新以后的用户关系。您可以通过两个步骤来实现这一目标:

插入记录并恢复ID。 更新行以将其链接到用户。 步骤中的示例: 插入行:

sql 复制 插入your_table(Column1,column2) 值('value1','value2') 返回的ID; 使用返回子句中的ID更新行,将其链接到用户:

sql 复制 更新your_table 设置user_id ='user_id_value' id ='rection_id'; 更多上下文: 为什么需要这?使用RLS,您的表行会根据用户的上下文限制,因此,当您插入数据时,它可能不会立即与用户关联。但是,由于插入完成了,您可以立即将ID归还,然后您可以更新该行以将其与用户关联。

带有RLS:RLS的挑战旨在确保用户只能与允许访问的数据进行交互。这就是为什么您不能仅仅插入记录的原因,因为根据当前用户,权限可能有所不同。上面的流程通过让您首先插入,然后将用户的访问应用于此操作。

© www.soinside.com 2019 - 2024. All rights reserved.