Получайте пропущенные права при попытке добавить только к пользователю

1

Я пытаюсь разрешить чтение/запись только для UID пользователей, однако скрипт продолжает говорить о недостающем разрешении, пожалуйста, помогите.

Большое спасибо'

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid == userId;
    }
  }
}
db.collection('users').doc(userId).collection('details').add(...
Теги:
firebase
firebase-security-rules
google-cloud-firestore

2 ответа

1

Правила, которые вы написали, соответствуют только документам, которые находятся непосредственно в коллекции, называемой "пользователи". Однако вы пытаетесь получить доступ к документу внутри подмножества документа под "пользователями".

В документации очень подробно рассматривается эта ситуация, поэтому не забудьте прочитать и понять, как иерархические данные работают для правил безопасности.

Если вы хотите применить правила каждого пользователя ко всем документам в коллекции и всем документам во всех вложенных подколлекциях под этим документом, вы можете просто сказать следующее:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth.uid == userId;
      match /{document=**} {
          allow read: if request.auth.uid == userId;
      }
    }
  }
}

Обратите внимание, что совпадение должно быть вложен таким образом, чтобы использовать подстановочный знак userId из внешнего соответствия.

  • 0
    или просто в одну строку. вам не нужно вкладывать совпадения, так как одна и та же проверка два раза, просто используйте одну строку: users / {userId} / details / {detail}. это может быть не важно здесь, но при проверке доступа к другим документам Firestore учитывает каждое чтение как одно, поэтому у вас будет двойное число операций чтения, что будет стоить вам больше денег.
  • 0
    @dAxx_ Эта строка не будет соответствовать документам, существующим в коллекции пользователей. Вложенность здесь обязательна, и они не проверяются дважды. Там нет никаких затрат, связанных с этими правилами. Стоимость будет только в том случае, если вы используете get () или exist () для проверки содержимого документа.
Показать ещё 3 комментария
0

Вероятно, вы забыли включить поставщика входа в консоль firebase. Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню