Supabase策略配置:允许仅更新Events表特定列的权限设置
解决方案
需求回顾
需要实现Supabase行级安全策略,满足:
- 所有已认证用户可更新
events表的attendees_count列(无论是否为事件创建者) - 非事件创建者无法修改
events表的其他任何列
策略编写
你需要创建两个互补的更新策略,结合使用来实现需求:
-- 策略1:允许事件创建者修改自身事件的所有列 create policy "事件创建者可全量更新事件" on "public"."events" as permissive for update to authenticated using ((auth.uid() = created_by)) with check ((auth.uid() = created_by)); -- 策略2:允许所有认证用户仅更新参会人数统计列 create policy "认证用户可更新参会人数" on "public"."events" as permissive for update to authenticated using (true) with check ( -- 确保除attendees_count外,其他列与原数据完全一致 old.* is not distinct from new.* except for attendees_count );
策略说明
- 事件创建者全量更新策略:和你提供的示例逻辑一致,仅允许事件的创建者(
created_by字段匹配当前用户ID)修改该事件的所有字段。 - 参会人数专用更新策略:
using (true)放开了所有已认证用户的更新权限范围with check子句通过对比新旧行数据,强制要求除attendees_count外的所有字段必须保持原值,彻底限制了非创建者只能修改参会人数这一列。
Supabase的行级安全策略是累加生效的,只要满足任意一个策略的条件,操作就会被允许。因此:
- 事件创建者可以通过第一个策略修改所有字段,也能通过第二个策略单独更新参会人数
- 非创建者只能通过第二个策略修改参会人数,无法触碰其他字段
内容的提问来源于stack exchange,提问作者Kitani Islam
相关产品推荐
相关产品推荐

