У меня есть код в правилах безопасности 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
(когда речь идет, конечно, об одном и том же документе), будет ли она стоить одинаково или нет?