Firestore规则-当规则通过而没有OR语句时,为什么在规则中添加OR语句返回false?

时间:2018-07-03 20:15:56

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

我有一个Firestore规则可以通过,直到添加OR语句为止。不管右边是真还是假,这还不应该过去吗?

allow read: if exists(/databases/$(database)/documents/companies/$(company)/users/$(request.auth.uid)) 
|| hasRole(['Super', 'Manager', 'Tester']);

如果我忽略了||, hasRole(['Super','Manager','Tester']);规则通过/允许数据访问。

这与功能有关吗,还是我在Firestore规则中缺少Or语句?

function hasRole(roles) {
    return get(/databases/$(database)/documents/companies/Seva%20Development/users/$(request.auth.uid)).data.roles.hasAny(roles);
}

companies / company / users / userId具有许多字段,其中之一是角色。角色是字符串数组(例如:[“ Admin”,“ Manager”,“ Tester”])。

1 个答案:

答案 0 :(得分:0)

我相信是因为您没有在hasRole中正确使用变量,并且data应该在get之后调用。 hasRole应该是:

function hasRole(roles) {
  return get(/databases/$(database)/documents/companies/$(company)/users/$(userId)).data.roles.hasAny(roles);
}