Я пытаюсь написать правило в консоли безопасности firebase с помощью get (), но все равно не могу получить данные ресурса ... Я хочу, чтобы документы и их подколлекции были доступны для чтения пользователю, если пользовательский uid находится в поле документа , массив или карта.
Структура моей коллекции: /boards/(boardId)/...mch more
Поля в (boardId) документе:
- имя : "Board name"
- ownerId: "MYID12345"
- guestId (массив): ["MYID12345"]
- guestMap (карта): [MYID12345: true]
Правила безопасности:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /boards/{boardId=**} {
// rules here
}
}
}
То, что я пробовал до сих пор:
allow read: if get(/databases/$(database)/documents/boards/$(boardId)).data.guestsMap[request.auth.uid] == true;
allow read: if request.auth.uid in get(/databases/$(database)/documents/boards/$(boardId)).data.guestsMap;
allow read: if request.auth.uid in get(/databases/$(database)/documents/boards/$(boardId)).data.guestsMap[true];
allow read: if get(/databases/$(database)/documents/boards/$(boardId)).request.data.guestsId[request.auth.uid];
allow read: if request.auth.uid in get(/databases/$(database)/documents/boards/$(boardId)).data.guestsId;
allow read: if request.auth.uid in get(/databases/$(database)/documents/boards/$(boardId)).request.data.guestsId;
allow read: if get(/databases/$(database)/documents/boards/$(boardId)).data.ownerId == request.auth.uid;
allow read: if get(/databases/$(database)/documents/boards/$(boardId)).data.ownerId == "MYID12345";
allow read: if get(/databases/$(database)/documents/boards/$(boardId)).resource.data.ownerId == request.auth.uid;
allow read: if get(/databases/$(database)/documents/boards/$(boardId)).request.data.ownerId == request.auth.uid;
Ничего из этого не сработало, всегда получая:
ERROR FirebaseError: Missing or insufficient permissions.
allow read: если true, приложение работает нормально. Я придерживаюсь документации, но она не работает для меня ...
@ update
match /boards/{boardId=**} {
allow read: if resource.data.ownerId == request.auth.uid;
}
Также не могу использовать это так, потому что тогда каждая подколлекция ищет Поле ownerId в его документах, а ownerId или массив списка друзей находятся только в документе форума.
@ update
Я пытался сделать так, но это не помогло:
match /boards/{boardId} {
allow read, write: if request.auth.uid in resource.data.guestsId || request.auth.uid == resource.data.ownerId;
allow create: if exists(/databases/$(database)/documents/users/$(request.auth.uid));
function passResource() {
return request.auth.uid in resource.data.guestsId || request.auth.uid == resource.data.ownerId;
}
match /categoryList/{categoryId} {
allow read, write: if passResource();
}
...
}
Что мне здесь не хватает?