如何使用Firestore安全规则的resource.id字段?

时间:2019-04-03 11:49:22

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

Firebase安全规则随附一个资源对象,该对象记录在here中。但是,在编写规则时使用id字段无法正常工作。

match /{collectionName}/{document=**} {
            allow read: resource.id == 'SomeDocumentId'
            allow write: if false;
        }

    }

使用文档ID模拟时,它会拒绝。

match /{collectionName}/{document=**} {
            allow read: resource.id == null
            allow write: if false;
        }

    }
match /{collectionName}/{document=**} {
            allow read: resource.id != null
            allow write: if false;
        }

    }

如果您检查它是否为null,则两个规则都始终拒绝。在相同的设置下,Id字段既为空,也不为空。

我相信,在大约一年前编写规则时,我已经对其进行了测试并可以正常工作,但现在却出现了问题。关于使用resource.id字段有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

问题得到了单独解决。 Firebase端可能存在临时问题。现在,如果资源可用,则null检查始终返回false,而不是null检查始终为id字段返回true。另外,如果有可用资源,则此方法也始终返回true

match /{collectionName}/{document} {
        allow read: resource.id == document
        allow write: if false;
    }
}

答案 1 :(得分:0)

一种解决方案是使用{document}而不是使用{document=**}并使用$(document)作为参数编写嵌套规则。但是我不想要那个。我想使用resource.id字段

要将其用作验证字段,可以使用resource.data.FIELDNAME