首页 > 解决方案 > Firestore 规则 - 为什么在没有 OR 语句的情况下通过规则时在返回 false 的规则中添加 OR 语句?

问题描述

我有一个 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);
}

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

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


我相信这是因为你没有正确使用你的变量hasRoledata应该在get. hasRole应该:

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

推荐阅读