当前位置: 首页 > 知识库问答 >
问题:

配置firestore安全规则以允许用户有效地仅访问自己的数据

鲁龙野
2023-03-14

使用firestore和angularfire2 RC2。

service cloud.firestore {
    match /databases/{database}/documents {
        match /collectionA/{userId=**} { 
            allow read, write: if true;
        }
        match /collectionB/{userId=**}  {
            allow read, write: if true;
        }
        match /collectionC/{userId=**}  {
            allow read, write: if true;
        }
        match /collectionD/{userId=**}  {
            allow read, write: if true;
        }
    }
}

我想要达到的目的是只允许用户访问他们自己的数据。

我从以下规则开始:

service cloud.firestore {
    match /databases/{database}/documents {
        match /collectionA/{userId=**} { 
            allow read, write: if request.auth.uid == userId;
        }
        match /collectionB/{userId=**}  {
            allow read, write: if request.auth.uid == userId;
        }
        match /collectionC/{userId=**}  {
            allow read, write: if request.auth.uid == userId;
        }
        match /collectionD/{userId=**}  {
            allow read, write: if request.auth.uid == userId;
        }
    }
}

然而,只要我添加任何类型的限制性规则,包括甚至只是验证请求,就被授权了。

match /databases/{database}/documents {
    match /collectionA/{userId=**} { 
       allow read, write: if request.auth;
    }
    match /collectionB/{userId=**}  {
        allow read, write: if request.auth;
    }
    match /collectionC/{userId=**}  {
        allow read, write: if request.auth;
    }
    match /collectionD/{userId=**}  {
         allow read, write: if request.auth;
    }
}
const entryCollection: AngularFirestoreCollection<Entry> = this.angularfirestore.collection('collectionC/' + user.uid + '/records' + '/2017-40' + '/entries');

共有1个答案

徐瀚
2023-03-14

简而言之,{userid=**}导致userid路径而不是字符串。这意味着将其与request.auth.uid(字符串)进行比较将失败。相反,您可能需要以下内容:

service cloud.firestore {
    match /databases/{database}/documents {
        match /collectionA/{userId}/{allSubcollections=**} { 
            allow read, write: if request.auth.uid == userId;
        }
    }
}

这将保证userid是一个字符串,然后匹配适当的子集合(请再次注意,allsubcollections将是一个path)。

 类似资料:
  • 我花了最后一天的时间试图做一些关于消防规则的事情,但我似乎找不到任何地方的解决方案。我对这个火炉规则很陌生,所以请耐心:) 我目前有以下规则:

  • 我有一些rest api,如下所示: 我必须如何保护他们?每个用户只能看到她/他的数据,但管理员可以看到所有数据。 怎样 在会话中的每个方法用户ID等于传递给api的user_id参数之前,我是否检查过?有更好的方法吗? 附言:我使用JWT的Spring安全。

  • 任何指导都非常感谢! 谢谢,A。

  • 那么,如何在安全组中添加出口规则,允许通过端口443对ECR URI进行出站访问,而不对所有IP地址开放呢?

  • 我当前的Android应用程序使用Firebase实时数据库。 我正在与安全规则作斗争,因为我希望只允许单个用户写入数据,同时允许任何经过身份验证的用户读取数据。 我制定了这些规则,但不确定它们是否足够安全。。。 其中“XXXXXXXXXXXXXXXXXXXX”是我希望允许写入数据的指定用户。 用户的uid是常量值吗? 在测试新规则时,单击“模拟”按钮时,“验证”选项管理什么?

  • null 基本上数据结构如下所示: 问题是,我应该写什么安全规则来允许用户只在他们所属的组中(拥有组密钥)读取、创建和更新数据?同时,如何禁止用户找出其他群组的密钥?