Итак, я весь день бился головой о стену, пытаясь откатить назад и отладить правила своего пожарного депо. Я удалил его прямо туда, где находится проблема, которая, надеюсь, облегчит ее объяснение.
Все работает , если , если сделать это с моим правилом:
service cloud.firestore {
match /databases/{database}/documents {
match /user_partnerships/{partnershipId} {
allow read: if 0 == 0;
}
}
}
Возвращает 2 документа с идентификаторами cLMZw4EqkSLnafGt8wz7 и ky4hxaEqI8BeLFoip2DF , как и ожидалось.
Используя вышеизложенное и возвращая данные, я знаю, что сам запрос не является проблемой, поскольку правило разрешает запрашивать все данные.
Итак, перейдем к вопросу ... если я теперь изменю вышеприведенное на приведенное ниже, оно перестает работать и говорит, что у меня нет разрешения:
service cloud.firestore {
match /databases/{database}/documents {
match /user_partnerships/{partnershipId} {
allow read: if exists(/databases/$(database)/documents/user_partnerships/$(partnershipId));
}
}
}
Это, безусловно, не имеет смысла, так как текущий документ, обрабатываемый правилом, является тем, к чему он обращается и, очевидно, существует ..
Похоже, с этим параметр {partnershipId} в правиле, то есть documentId, не передается в функцию get () и, по-видимому, вообще не доступен.
Я проверил, могу ли я смоделировать рабочее правило, просто введя идентификаторы, которые, как я знаю, существуют, в функции get (), и это сработало:
service cloud.firestore {
match /databases/{database}/documents {
match /user_partnerships/{partnershipId} {
allow read: if exists(/databases/$(database)/documents/user_partnerships/ky4hxaEqI8BeLFoip2DF) || exists(/databases/$(database)/documents/user_partnerships/cLMZw4EqkSLnafGt8wz7);
}
}
}
Это работает! Итак, он показывает, что передача переменной partnershipId не работает?
Теперь это не те правила, которые я собираюсь использовать, я собираюсь запросить что-то, используя partnershipId для сбора разрешений ролей, но так как partnershipId даже не кажется доступным, я даже не могу этого начать.
Пожалуйста, помогите? Кажется, я вообще не могу получить доступ к переменной match / user_partnerships / {partnershipId} .
Редактировать: еще один пример того, что это не имеет никакого смысла:
Это работает
service cloud.firestore {
match /databases/{database}/documents {
match /user_partnerships/{partnershipId} {
allow read: if resource.data.permissionOwner == request.auth.uid;
}
}
}
Но это не так
service cloud.firestore {
match /databases/{database}/documents {
match /user_partnerships/{partnershipId} {
allow read: if get(/databases/$(database)/documents/user_partnerships/$(partnershipId)).data.permissionOwner == request.auth.uid;
}
}
}