Firestore 规则适用于模拟器但不适用于网站

马格努斯

我正在尝试为我的 Firestore 数据库创建一些规则。当我在 firebase 控制台的模拟器中运行这些规则时,一切正常。然而,当我部署规则并在我的网站上试用时,我在控制台中收到一个权限被拒绝的错误。

我试图访问的数据是这样存储的:

1. /teams/{teamId}

2. /teams/{teamId}/boards/{boardId}

其中{teamId}{boardId}是自动生成的 ID:

例如:

/teams/JTUrZcqz9Z20JuyCCcnV

/teams/JTUrZcqz9Z20JuyCCcnV/boards/OfcLPZItCk6Li7OeXwwt

我正在尝试遍历所有这些孩子。

Firestore 数据库: 控制台中的 Firestore 数据库

控制台中的 Firestore 数据库

firestore.rules:

 match /teams/{teamId} {
   allow read: if isMemberOfTeam(teamId);
   allow write: if true; // memberOfTeam(teamId);

  match /boards/{boardID} {
   allow read: if memberOfTeam(teamId) || boardIsPublic(teamId);
   allow write: if memberOfTeam(teamId);

    match /{document=**} {
     allow read: if memberOfTeam(teamId) || boardIsPublic(teamId);
     allow write: if memberOfTeam(teamId);
     }
  }
  match /{document=**} {
   allow read: if isMemberOfTeam(teamId); // memberOfTeam(teamId);
   allow write: if true; // memberOfTeam(teamId);
  }
 }

function isMemberOfTeam(teamId) {
    return  get(/databases/$(database)/documents/teams/$(teamId)).members[request.auth.uid].isMember;
}
function boardIsPublic(teamId) {
    return get(/databases/$(database)/documents/teams/$(teamId)).data.isPublic;
}

网站中的代码: Firestore 查询:

ref.where('members.' + user.uid + '.isMember', '==', true)

所有代码:

this.teamsCollection = this.auth.user$.filter(user => user != null)
  .map(user => this.afs.collection<TeamsInterface>('teams', ref => ref.where('members.' + user.uid + '.isMember', '==', true)))
  .shareReplay(1);
this.$teams = this.teamsCollection.switchMap(collection => collection.snapshotChanges().map(actions => {
  return actions.map(a => {
    const data = a.payload.doc.data() as TeamsInterface;
    data.id = a.payload.doc.id;
    return data;
  });
}));

我在控制台中遇到的错误:

权限缺失或不足。

马格努斯

我不知道为什么,但一切都适用于以下代码:

match /teams/{teamId} {
      allow read: if isMemberOfTeam(existingData());
      allow update: if isMemberOfTeam(existingData()); // memberOfTeam(teamId);
      allow create: if isSignedIn();

      match /archived/{boardID} {
        allow read: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data) 
              || boardIsPublic(existingData());
        allow write: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data);
      }

      match /boards/{boardID} {
        allow read: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data) 
              || boardIsPublic(existingData());
        allow write: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data);

        // match /beta {
        //   allow write: if memberOfTeam(teamId) || boardIsPublic(teamId);
        // }

        // All subcollection
        match /{document=**} {
          allow read: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data) 
                || boardIsPublic(get(/databases/$(database)/documents/teams/$(teamId)).data);
          allow write: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data);
         }
      }

     }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Firestore规则不适用于收集

SwiftUI·后台计时器适用于模拟器,但不适用于真实设备

通用链接适用于xcode8模拟器,但不适用于ios 10设备

是否有适用于Firestore安全规则的模拟器?

适用于公共和私人收藏的Firebase Firestore安全规则

Firestore中“数组包含”查询不适用于引用

firestore身份验证规则:适用于Google登录的客户端

Firestore批量查询更新不适用于我

使用Firebase Admin SDK(NodeJS)将数据导入Firestore不适用于所有集合

Firebase:“错误:9 FAILED_PRECONDITION:Cloud Firestore API不适用于Cloud Datastore项目”

Cloud Firestore不适用于iOS 扑

Firestore startAfter方法不适用于文档作为参考

Firestore安全规则:request.query.limit不适用于复合查询

自动滑动适用于iOS 6模拟器,但不适用于iOS 7

Forward GeoCoding正在模拟器上运行,但不适用于iPhone

应用程序是为模拟器创建的,但不适用于“通用iOS设备”

Firebase数据库安全性规则适用于模拟器,而不适用于Java代码

iOS 10.3 文本转语音适用于模拟器但不适用于设备

该应用程序适用于模拟器但不适用于实际设备

Android 谷歌地图适用于模拟器,但不适用于真机

React Native Android:请求适用于 android 模拟器,但不适用于 Play Store 构建

WebView 仅适用于模拟器而不适用于设备

Firestore 数据库安全规则仅适用于模拟器

Firestore IN 运算符不适用于布尔运算符

Firestore 特定数据读取不适用于变量,但适用于静态值

rxjs distinct 不适用于 Firestore 查询

Firestore 查询适用于 flutter 但不适用于 node.js

仅适用于内容所有者和公共的 FireStore 安全规则

Firestore Multiprovider 不适用于身份验证