在Supabase中,当我尝试将一行添加到父表时,我得到以下错误,这也应该触发在子表中添加相应的行:new row violates row-level security policy for table \"members\"
我有一个名为TEAM的父表和一个名为MEMBERS的子表。每个团队都是由一个所有者拥有的。每一位业主也是团队的一员。
TEAM
----
id (uuid)
owner (uuid) --> FK relationship with public.users.id
MEMBER
----
team_id (uuid) --> FK relationship with TEAM.id
member_id (uuid) --> FK relationship with public.users.id
为了实现这一点,我有一个触发器,它在TEAM表的每一行执行AFTER INSERT,并将team_id和所有者的user_id插入MEMBERS。
我有一个关于成员的RLS政策,它说只有所有者才能向团队添加成员。使用下面给出的SECURITY DEFINER SQL函数检查:
Name:is_team_owner(_team_id uuid)返回BOOL代码-
SELECT EXISTS (
SELECT 1
FROM members m, team t
WHERE m.team_id = t.id
AND t.owner_id = auth.uid()
AND t.id = _team_id
)
我的INSERT的RLS策略是MEMBERS上的WITH CHECK(is_team_owner(_team_id))。
我的问题是,当我使用cURL创建一个新的团队时a)新的团队没有被添加到表b)我得到以下错误:new row violates row-level security policy for table \"members\"
我怀疑(a)是因为(b),这也是一个问题,因为我的触发器应该在INSERT之后运行,所以MEMBERS表中的策略违规不应该影响TEAM中的插入。
我认为(B)的发生是因为当触发插入MEMBERS时,插入TEAM还没有完成。
我该如何修正(B)?
1条答案
按热度按时间tktrz96b1#
我刚刚测试过它,如果我这样定义策略,它就能正常工作: