Firestore 规则 - 当规则在没有 OR 语句的情况下传递时,为什么在规则中添加 OR 语句返回 false?



我有一个火存储规则,直到我添加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);
}

公司/公司/用户/用户ID有许多字段,其中之一是角色。角色是一个字符串数组(例如:["管理员"、"经理"、"测试人员"](。

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

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

相关内容

最新更新