我有一个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”])。
答案 0 :(得分:0)
我相信是因为您没有在hasRole
中正确使用变量,并且data
应该在get
之后调用。 hasRole
应该是:
function hasRole(roles) {
return get(/databases/$(database)/documents/companies/$(company)/users/$(userId)).data.roles.hasAny(roles);
}