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

如何为Supabase的contracts表配置关联customers表的RLS规则?

实现contracts表的RLS规则配置

前提确认

确保contracts表已通过customer_id字段与customers表建立关联(即contracts.customer_id是指向customers.customer_id的外键),如果还没建外键,先执行:

ALTER TABLE contracts ADD CONSTRAINT fk_contract_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

步骤1:启用contracts表的行级安全(RLS)

首先需要开启contracts表的RLS,执行SQL:

ALTER TABLE contracts ENABLE ROW LEVEL SECURITY;

步骤2:创建SELECT权限规则

这条规则会限制用户仅能查看属于自己客户的合同,核心是通过关联customers表验证profile_id匹配:

CREATE POLICY "仅查看自己客户的合同" ON contracts
FOR SELECT USING (
  EXISTS (
    SELECT 1 FROM customers
    WHERE customers.customer_id = contracts.customer_id
    AND customers.profile_id = auth.id()
  )
);

可选:添加其他操作的RLS规则

如果需要限制用户只能对自己客户的合同进行插入、更新或删除操作,可以添加以下规则:

插入规则(确保插入的合同属于自己的客户)

CREATE POLICY "仅为自己的客户插入合同" ON contracts
FOR INSERT WITH CHECK (
  EXISTS (
    SELECT 1 FROM customers
    WHERE customers.customer_id = contracts.customer_id
    AND customers.profile_id = auth.id()
  )
);

更新规则

CREATE POLICY "仅更新自己客户的合同" ON contracts
FOR UPDATE USING (
  EXISTS (
    SELECT 1 FROM customers
    WHERE customers.customer_id = contracts.customer_id
    AND customers.profile_id = auth.id()
  )
);

删除规则

CREATE POLICY "仅删除自己客户的合同" ON contracts
FOR DELETE USING (
  EXISTS (
    SELECT 1 FROM customers
    WHERE customers.customer_id = contracts.customer_id
    AND customers.profile_id = auth.id()
  )
);

通过Supabase控制台操作(适合新手)

如果不习惯写SQL,可以通过GUI配置:

  • 登录Supabase控制台,进入目标项目
  • 导航至Database → Tables,找到contracts表
  • 切换到RLS标签,先点击"Enable RLS"开启行级安全
  • 点击"New Policy",选择"Custom policy"
  • 填写规则名称(如"查看自己客户的合同"),选择对应的操作(如SELECT)
  • 在"USING expression"输入框中填入:
    EXISTS (SELECT 1 FROM customers WHERE customers.customer_id = contracts.customer_id AND customers.profile_id = auth.id())
    
  • 保存规则即可

原理说明

通过EXISTS子查询关联customers表,利用已有的profile_id与用户auth.id()的匹配逻辑,无需在contracts表中重复存储profile_id字段,既避免了数据冗余,又继承了customers表的权限控制逻辑。

内容的提问来源于stack exchange,提问作者J0mk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:27:14