“允许创建”不适用于Firestore规则中的某些集合

时间:2018-10-01 10:38:12

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

我在Firestore中拥有一个数据库,该数据库具有我已通过读取,创建,更新和删除操作为其定义安全规则的集合的数量。

直到周六中午,所有具有给定条件的规则都允许将数据读写到集合中,但是之后突然在一个名为“位置”的特定集合中给出了 PERMISSION DENIED 例外,仅适用于在同一集合中创建文档,但可以读取,更新和删除作品。

所以我更改了该集合的规则,如下所示进行测试

#!/bin/bash

MAJORRELEASE=$( lsb_release -sr | cut -d\. -f1 )
STROS=$( lsb_release -si )


# Ubuntu 18.04
if [ $STROS == Ubuntu ] && [ $MAJORRELEASE -ge 18 ] ; then
  if [ -d /etc/netplan ]; then
    DNSSERVERS=``
    DNSSERVERSSEARCH=``

    cat <<EOF | tee /etc/netplan/01-netcfg.yaml
network:
   version: 2
   renderer: networkd
   ethernets:
     switchports:
       match: {name: "enp*"}
   bonds:
     bond0:
       interfaces: [switchports]
       addresses: [${IP}]
       gateway4: ${ROUTE}
       nameservers:
         search: [${DNSSERVERSSEARCH}] 
         addresses: [${DNSSERVERS}]
EOF

  fi
fi

,在Android客户端中,我的编码为

match /locations/{locationID} {
    allow read: if true;
    allow create: if true; //Condition commented...
    allow update: if <condition>;
    allow delete: if false;
}

尽管如此,允许创建:如果为真,则会给出缺少权限或权限不足的相同例外。但是当我将其更改为“允许写:如果为真” 时,它将起作用并添加了文档

当我在规则客户代码中都将集合名称更改为 test 时,它将在同一集合中创建新文档,但是当我更改时集合名称为 locationData location locations ,将无法正常工作。

这是Firestore规则中的问题吗?或者有什么解决方案?

1 个答案:

答案 0 :(得分:0)

似乎在尝试将dataMap保存到Firestore时触发了更新规则。

请注意,doc.set()基本上是set()

{{1}}的行为是,如果文档已经存在,它将尝试覆盖该文档,并将执行更新操作,从而触发您的安全规则中的更新规则。

您有两个选择:

1)检查要保存的数据是否已在locations集合中存在。

2)将更新规则设置为允许为true,以便您可以验证文档是否已存在。

希望有帮助。