Это моя структура каталогов Firestore:
items \ {document} \ 1 item with date, image etc
users \ {document} \ favoriteItems
При запуске: приложение загружает список элементов.
Это мои старые правила, которые явно не подходят для производства:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Но со старыми правилами я не получаю ошибку. Так должно быть в правилах.
Когда избранный пользователем элемент впервые, пользователь еще не существует в коллекции users
. В подкаталоге пользователя есть подстановочный знак document=**
:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /items/{document} {
allow read, write: if request.auth.uid != null;
}
match /users/{document=**} {
allow read, write: if request.auth.uid == request.resource.data.author_uid
}
}
}
Но эти правила дают следующее сообщение об ошибке:
Firestore: (21.4.2) [Firestore]: прослушивание запроса ( target = Query (users / vsfcRpgewjNdFfQomf7MohcOMcA3 / FavoritesItems, упорядоченный по name ); limitType = LIMIT_TO_FIRST) не выполнен: Status {code = PERMISSION_DENIED, description = отсутствуют или отсутствуют разрешения., причиной = 10 * 10 * * 10 * 10 * *
Это кажется очевидным, потому что в первый раз document
еще не существует. Но также, когда он присутствует, я получаю то же сообщение об ошибке. Каковы надлежащие правила для этого?