【问题标题】:Cloud Firestore Security Rules for array operations阵列操作的 Cloud Firestore 安全规则
【发布时间】:2019-01-05 11:42:41
【问题描述】:

我正在尝试将针对 Firestore 的某些操作限制为创建或附加到数组。我该怎么做?如何区分arrayUnion()arrayDelete()?如何区分数组操作和所有其他操作?

更新:到目前为止,从我通过深入研究 Firestore API 得到的信息来看,我猜可能像 allow create, FieldValue.arrayUnion: if true 这样的东西可以工作,但我还没有测试过,会更新当我测试它时。

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    如果您想确保对文档的任何更新都不会从数组中删除任何现有值,您正在寻找hasAll

    allow update: if request.resource.data.arrayField.hasAll(resource.data.arrayField);
    

    我刚刚在模拟器中快速测试了这个。更新包含arrayField: ["value1", "value2"] 的文档,我:

    • 写入arrayField: ["value1"] 时失败
    • arrayField: ["value1", "value2"]时成功
    • arrayField: ["value1", "value2", "value3"]时成功

    【讨论】:

    • 这似乎是一种有效的方法,但是,在我的客户端,我正在更新数组而不包括整个数组(我正在使用.update("regions", FieldValue.arrayUnion("value_to_append")) 方法),你确定我什么时候调用方法,请求会得到数组中的所有元素吗?我无法立即对其进行测试,因为我的整个设置相当复杂。
    • 是的。 request.resource 是文档,因为它会在写操作之后存在(如果允许的话)。如果这在您的测试中不起作用,请回复您尝试过的内容。
    • 酷!我会尽快试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多