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字段有任何帮助吗?
答案 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