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

在云FireStore中,如何在一个集合中限制读写,在另一个集合中限制写,这两个集合都与同一用户相关?

端木桐
2023-03-14

我在云firestore中有用户和配置文件集合,如下图所示。我将用户详细信息存储在用户集合中,文档ID作为用户的firebase UID,这样只有特定的用户可以更新和读取自己的数据,而不是其他用户。我有用户集合的安全规则,类似于在这个答案中禁用Firebase Cloud Firestore中的查询集合。现在我的配置文件集合应该是一个公共文档集合,这样可以引用这些ID来读取配置文件的详细信息,但是每当用户在用户集合中更新他们的数据时,如果公共字段被更新,它也应该反映在配置文件文档中。我怎样才能做到这一点?

附注:在用户文档中的字段像姓名,年龄,付款细节,在配置文件中,它像姓名和年龄只有。

共有1个答案

沈枫涟
2023-03-14

每当用户在用户集合中更新他们的数据时,如果公共字段被更新,它也应该反映在概要文件中。

您可以使用批写,如下所示:

// Get a new write batch
var batch = db.batch();

var userId = '......';

var commonData = {
    name: '...',
    age: ...
}

var userRef = db.collection('users').doc(userId);
batch.update(userRef, {paymentDetails : "...", ...commonData});  
// We use the spread syntax, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#Spread_in_object_literals

var profileRef = db.collection('profiles').doc(userId);
batch.update(profileRef, commonData);

// Commit the batch
batch.commit().then(function () {
    // ...
});

write安全规则而言,您可以将它们定义如下:

service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{userId} {
      allow write: if request.auth.uid == userId;
      allow ....
    }

    match /profiles/{userId} {
      allow write: if request.auth.uid == userId;
      allow ....
    }

  }
}
 类似资料:
  • 我所处的情况是,当用户付款时,存储在Firestore集合(CartProducts)中的购物车产品应移动到名为SuccessFullOrders的新集合。 因此,我的基本问题是如何在Flutter中将所有文档从一个集合移动到Firestore的另一个集合 我不知道如何在flutter中编写代码。谢谢你的回答 这是我的代码

  • 我有一个问题,但在我看来,我看到的所有解决方案都在解决一个比我更复杂的问题。 我对MongoDB比较陌生,但我一直在将它与Apache Neach一起使用来存储抓取的文档。由于我分阶段抓取,并以不同的方式评估每个抓取的结果,以获取统计数据,因此我一直将结果存储在不同的集合中。 我所要做的就是把这些收藏放在一起成为一个大的收藏,这样我就可以翻译和分类。所有字段都是相同的,因此我不需要添加任何新字段。

  • 我使用的是Vue.js和Firebase FiRecovery。现在我有两个集合和。在订单集合中,我已经存储了集合的每个文档的id。我现在必须从中获取相应用户的详细信息。我应该怎么做?这是我迄今为止所做的 我需要在userInfo中存储用户数据。提前谢谢

  • 我的用户可以在子集合中创建文档(比如任务),并使用一系列安全规则检查身份验证、权限和数据有效性。他们甚至可以选择多个任务并将其复制到同一集合中。现在,一个普通用户可能一次最多创建100个任务,但如果有人恶意获取我的数据库凭据,进行身份验证,并尝试以编程方式创建大量有效文档,该怎么办?这将使Firestore的扩展不会出现问题,也会给我的Firebase账单带来意想不到的惊喜。这是我首先关心的问题,

  • 虽然我在stackOverFlow MongoDB上发现了类似的问题,但使用外键将字段复制到另一个集合 我想将字段名称从集合中复制到集合中,其中userdetails中的userId等于user中的\u id。 用户集合 userDetail集合 这是我的问题: 此查询部分工作。它只更新文档,其中_id是字符串类型。_id为ObjectId的用户文档不会更新。

  • 我知道有一种方法可以实现db。收集getIndexes(),它将列出为集合定义的所有索引。有没有办法将这些索引定义复制并创建到另一个集合? 有很多,我不想一个接一个地做。 关于重复的问题评论:我不希望复制收藏。我希望以可以应用于另一个集合的格式导出索引。