Правила Firestore - Почему добавление оператора OR в правило возвращает false, когда правило проходит без оператора OR? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть правило пожарного депо, которое проходит, пока я не добавлю оператор OR. Разве это не должно пройти независимо от того, является ли правая сторона истинной или ложной?

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

Если я пропущу || hasRole (['Super', 'Manager', 'Tester']); Правило передает / разрешает доступ к данным.

Это связано с функцией, или я что-то упустил с операторами Or в правилах firestore?

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 голосов
/ 03 июля 2018

Я полагаю, это потому, что вы неправильно используете свои переменные в hasRole и data следует вызывать после get. hasRole должно быть:

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