Firestore规则,用于限制对文档中特定字段的写入权限

问题描述 投票:9回答:1

我使用Stripe付款。为此,我在Firestore中有以下数据模型:

Users/{userId}/payments/{document}

每个{document}都是一个看起来像这样的对象:

{
  amount: 55
  token: {...}
  charge: {...}
}

用户必须能够编写token字段(这是传递给服务器的内容),但我不希望用户能够编写charge字段。

目前我的规则允许任何用户读取和写入此文档:

match /payments/{documents} {
  allow read, write: if request.auth.uid == userId;
}

什么Firestore规则将实现我所期望的安全性?

firebase stripe-payments firebase-security google-cloud-firestore
1个回答
21
投票

我相信以下内容可行,它允许客户更新除收费之外的字段,以及创建没有收费字段的文档。

service cloud.firestore {
  match /databases/{database}/documents {
    function valid_create() {
        return !(request.resource.data.keys().hasAll(["charge"]));
    }

    function valid_update() {
        return request.resource.data.charge == resource.data.charge
               || (valid_create()
                  && !(resource.data.keys().hasAll(["charge"])))
    }

    match /payments/{documents} {
        allow read: if request.auth.uid == userId;
        allow create: if request.auth.uid == userId
                        && valid_create(); 
        allow update: if request.auth.uid == userId
                        && valid_update(); 
    }
  }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.