Firestore规则get()/ exist()无法正常工作

时间:2019-08-06 12:50:36

标签: google-cloud-firestore firebase-security

我正在使用Firestore规则,并且想在函数中调用get() / exist(),然后在子集合中调用该函数。但这会给出错误:

  

运行模拟时出错-发生未知错误(查看过时的模拟)

能帮我指出我的错误吗?

当我尝试  允许创建:if get(/ databases / {database} / documents / Attendants / $(request.auth.uid).data.UserID)!= request.auth.uid

它将给出以下错误:

运行模拟时出错-错误:simulator.rules第[12]行,第[31]列。找不到函数错误:名称:[get]。错误:提供了无效的参数来调用。函数:[get],参数:[“ || invalid_argument ||”](查看过时的模拟)

当我遵循本文档https://firebase.google.com/docs/firestore/manage-data/transactions并尝试exist()时:

存在(/databases/{database}/documents/admins/$(request.auth.uid)); 仍然行不通。

我尝试了存在的其他路径并获得功能,即使我尝试使用完整路径也可以正常工作。 get(/databases/$(database)/documents/GroupExperiences/Experience/PrivateExperience/XmZPoKKQuZBeP68KAIJl/Admins/it07).data

   match /PrivateExperience/{Experience}
   { 
    function isAdmin()
     {
       //return true;
       return exists(/databases/$(database)/documents/Admins/$(request.auth.uid));
          }
          function isAttendant()
          {
            return exists(/databases/$(database)/documents/Attendants/$(request.auth.uid));
          }
        allow create: if request.auth == null; 
         match /Activities/{Activity=**}
        {
         allow create: if (isAdmin() || isAttendant());
        }
       }

Rules and testing screen Database schema

1 个答案:

答案 0 :(得分:1)

已解决错误::错误正在运行模拟—发生未知错误(查看过时的模拟)。 使用存在(/databases/{database}/documents/Attendants/$(request.auth.uid)) 这行得通。

通过尝试对实际开发进行测试来解决。

结论:这是有关Firestore规则模拟的问题。