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