You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase RLS 布尔字段校验问题:更新触发权限错误

问题原因及解决方案

问题根源

你的RLS策略中,WITH CHECK (pool_item_is_opened = false)强制要求更新后的行必须保持pool_item_is_opened为false,但你在Flutter代码里更新时,把这个字段设为了true,直接违反了这个约束,所以触发了权限错误。

策略里的USING条件是检查更新前的行状态(允许操作未打开的行),但WITH CHECK是对更新后的行做强制校验,两者结合后,你的更新操作刚好触碰了这个限制。

修正方案

如果你要实现的是「允许认证用户将未打开的卡片标记为已打开」,需要调整RLS策略的WITH CHECK部分:

CREATE POLICY "Users can mark unopened card as opened" ON "public"."pool"
AS PERMISSIVE FOR UPDATE
TO authenticated
USING (pool_item_is_opened = false) -- 仅允许操作未打开的行
WITH CHECK (
  pool_item_is_opened = true 
  AND pool_opened_user_id = auth.uid() -- 可选:确保标记的用户ID是当前登录用户,防止篡改
);

说明

  • USING条件保留,确保只能对原本未打开的行进行更新;
  • WITH CHECK改为允许更新后pool_item_is_opened为true,同时添加pool_opened_user_id = auth.uid()可以避免用户恶意设置其他用户ID,提升数据安全性。

内容的提问来源于stack exchange,提问作者Emirhan Gümüş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:05:26