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

时间:2019-02-02 19:23:47

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

我有个安全的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;
}

然后我开始得到许可的错误。除了将逻辑移到函数中外,我什么也没做,为什么这不起作用?

1 个答案:

答案 0 :(得分: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();
    }
  }
}

希望这可以帮助遇到此问题的其他人!