Правила Firebase Firestore: будет ли () проверенный документ засчитан как еще одно чтение? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть код в правилах безопасности Firestore, как этот (показаны только соответствующие части):

match /users/{userId} {
    function isUserDisabled(userId) {
        return get(/databases/$(database)/documents/users/$(userId))
                    .data.admin == true;
    }

    allow read:  if true;
    allow write: if request.auth.uid == userId
                 && !isUserDisabled(userId);

    match /posts/{postId} {
        allow read:  if true;
        allow write: if request.auth.uid == userId
                     && !isUserDisabled(userId);
    }
}

isUserDislabled() - это функция, которая будет вызываться в нескольких местах. Это будет get() документ пользователя, чтобы увидеть, отключен пользователь или нет.

Вопрос в том, будет ли первый вызов isUserDislabled(), который приведет к get() к проверочному документу, дополнительным чтением? Я понимаю, что за несколько get() к одному и тому же документу будет выставлен счет только один раз. Однако в этом случае это единственный get() для конкретного документа.

Редактировать 1: Похоже, мой вопрос не совсем то, что я имел в виду. (Я не являюсь носителем английского языка.) Вопрос в том, когда get() до /users/{userId} происходит в блоке match /users/{userId} (а не в субблоке), будет ли get() вызывать дополнительное чтение или нет? Другими словами, между использованием get() и использованием переменной resource (когда речь идет, конечно, об одном и том же документе), будет ли она стоить одинаково или нет?

1 Ответ

0 голосов
/ 11 мая 2018

Да, это будет считаться прочитанным документом.Каждый раз, когда необходимо прочитать документ, он считается таковым, и чтение его из правил безопасности ничем не отличается от чтения из другого кода.

...