Firestore有一个DocumentReference类型,它是另一个firestore文档的"指针".使用firebase JavaScript客户端,您可以直接在引用上访问属性(例如文档"id").
例如,如果有一个文档的docRef属性是firestore DocumentReference:
const retrievedDoc = await getFirestoreDocument();
console.log(retrievedDoc.docRef.id); // "jRmSeMYDMKiOPGsmkdaZ"
Run Code Online (Sandbox Code Playgroud)
我试图在firestore规则中完成同样的事情.有一个名为的自定义函数isOwner.它使用get文档路径上的firestore规则调用,然后尝试访问docRef.id它,就好像它是上面的JavaScript客户端一样.
get(/databases/$(database)/documents/path/to/$(id)).data.docRef.id
Run Code Online (Sandbox Code Playgroud)
将文档id的值与当前用户的值进行比较.但是当我使用模拟器和实际代码测试时,它会失败.我觉得这应该有效,但事实并非如此.
什么做的工作是存储和直接使用id的值作为字符串(例如get(/path/id).docId),而不是DocumentReference的.
我是否应该能够id在firestore规则中访问DocumentReference 的值?难道我做错了什么?
我想避免get在规则中执行第二个文档,如本SO答案所述.对于此规则的每个触发器,这是第二次"读取".而且我认为get无论如何都不会在电话上提供文件ID(这就是我需要的).