Как сопоставить пользовательский идентификатор, хранящийся в поле документа в правиле безопасности Firebase для Firestore - PullRequest
0 голосов
/ 13 марта 2020

Я хочу проверить UID, хранящийся в поле документа документа (родительской коллекции с именем premiumID ), по сравнению с UID пользователя, запрашивающего данные. Проще говоря, я хочу, чтобы пользователь имел доступ только к документу, содержащему его UID.

Вот что я делал до сих пор

service cloud.firestore {
  match /databases/{database}/documents {

    match /premiumID/{docId} {

      function userData() {
        return resource.data.uid
      }

      allow update: if userData() == request.auth.uid;
      allow delete: if userData() == request.auth.uid;
      allow create: if request.auth.uid != null;
      allow read: if userData() == request.auth.uid;
    }    
  }
}

Вот как выглядит моя БД-

enter image description here

Вот как я это тестирую. Это дает мне чтение и запись запрещены .

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Я думаю, что если вы хотите сопоставить документ, вы должны использовать {document} вместо {docId}. У меня тоже была похожая проблема, и я решил ее изменить на {document}.

match /pID/{document}
0 голосов
/ 13 марта 2020

Правило allow write: if request.auth.uid == request.resource.data.uid; проверяет, совпадает ли аутентификация пользователя с полем uid, содержащимся в документе. Но, как сказано в комментариях к вашему вопросу, название вашей коллекции не соответствует правилу, которое вы используете.

Проверьте этот сайт , оно содержит очень полезную информацию о правилах Firebase. Это действительно помогло мне, когда я начал использовать правила Firebase для более сложных правил.

...