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

Firestore规则测试时Mock数据初始化遇权限拒绝问题求助

解决Firestore规则测试中初始化数据时的权限拒绝问题

我来帮你分析下这个问题,你遇到的权限拒绝错误其实是因为测试数据初始化的顺序和Firebase规则加载的顺序搞反了。

问题根源

Firebase的测试SDK有个关键逻辑:所有针对Firestore的操作(包括初始化测试数据)都会受当前生效的安全规则约束。你当前的setup方法流程是:

  1. 创建测试App和Firestore实例
  2. 写入测试数据
  3. 加载自定义的Firestore规则

但在步骤2写入数据时,你的自定义规则还没有被加载,此时Firestore使用的是默认的安全规则(默认拒绝所有读写操作),所以写入数据的set操作触发了权限拒绝,抛出了你看到的PERMISSION_DENIED错误。

解决办法

调整setup方法的执行顺序,先加载Firestore规则,再初始化测试数据:

export const setup = async (auth?: any, data?: any) => {
  const projectId = `rules-spec-${Date.now()}`;
  // 第一步:先加载Firestore规则
  await firebase.loadFirestoreRules({ 
    projectId, 
    rules: fs.readFileSync("firestore.rules").toString() 
  });
  // 第二步:创建测试App和Firestore实例
  const app = firebase.initializeTestApp({ projectId, auth });
  const db = app.firestore();
  // 第三步:写入测试数据
  if (data) {
    for (const key in data) {
      const ref = db.doc(key);
      await ref.set(data[key]);
    }
  }
  return db;
};

额外说明

你写的Firestore规则和测试逻辑本身是没问题的,只要调整完setup的顺序,测试就能正常执行:

  • 当你用auth: { uid: "testid" }初始化测试App时,写入users/testid的数据会符合你的规则(isSignedIn() && userOwner(userId)),所以能成功写入
  • 后续的assertSucceeds和assertFails也会按照你的预期验证规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:09:06