в соответствии с функциями docs не может создавать переменные, но мне нужно проверить два поля на наличие разрешений на запись в моей коллекции companies
.У меня есть documentId, хранящийся в моем user
документе как company_slug
Так что правило № 1 для match /companies/{company} { allow write: ... }
:
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.company_slug == company
Это хорошо для доступа на чтение, но мне нужно проверитьuser.level
(1 для администратора, 2-n для других уровней) независимо от того, в порядке ли запись.
, поэтому правило № 2 будет
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.level == 1
Таким образом, полное правило будетбыть:
match /companies/{company} {
allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.company_slug == company;
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.company_slug == company && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.level == 1;
}
Что кажется очень громоздким и также «обойдется» мне 2 чтения и 1 запись для каждого отправленного запроса на запись, не так ли?
Есть ли способоптимизируйте это, так как это кажется очень сложным для поддержки по мере роста приложения.