移动公司的FireStore安全规则,以自定义函数符规则

问题描述 投票:1回答:1

我有检查的用户具有适当的代码来访问另一文档中的公司的FireStore安全规则。

service cloud.firestore {
  match /databases/{database}/documents {
    match /Orgs/{orgID} {
      allow read: if get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
    }
  }
}

这个伟大的工程。但是,如果我尝试这个检查进入像这样的自定义函数:

service cloud.firestore {
  match /databases/{database}/documents {
    match /Orgs/{orgID} {
      allow read: if isPartOfOrg();
    }
  }
}
function isPartOfOrg(){
  return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
}

然后,我开始获得许可的错误。我没有做任何事情,但移动逻辑到一个函数,这是为什么不工作?

firebase google-cloud-firestore firebase-security-rules
1个回答
2
投票

我想通了,而写的问题。该docs说,函数具有从定义它们,而不是从他们被称为地方范围访问的变量和函数。

因此,移动功能到匹配块的话,一切又有效!

service cloud.firestore {
  match /databases/{database}/documents {
    match /Orgs/{orgID} {
      function isPartOfOrg(){
        return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
      }
      allow read: if isPartOfOrg();
    }
  }
}

希望这可以帮助别人谁遇到这个问题!

© www.soinside.com 2019 - 2024. All rights reserved.