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