Правила Firestore: Ошибка при выполнении setData, PERMISSION_DENIED - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть следующие строки для записи данных в коллекции пользователей:

  final databaseReference = Firestore.instance;
  await databaseReference.collection("users")
      .document(userData['uid'])
      .setData(userData);

и userData is: {uid: b4WRYgXae8QIq9e3jTHscMPjvtk1, телефон: +17031110000}.

Я применил следующие правила, которые содержат строку allow write: if (request.auth.uid == resource.data.uid)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{docId} {
      allow read: if (true);
      allow write: if (request.auth.uid == resource.data.uid)
      allow read, write: if (request.auth.uid == 'xxxxx')
    }
    match /orders/{docId} {
      allow read, write: if (request.auth.uid == resource.data.uid)
      allow read, write: if (request.auth.uid == 'xxxxx')
    }
  }
}

Но трепетал я, выдав следующую ошибку:

  I/System.out(  931): (HTTPLog)-Static: isSBSettingEnabled false
    I/System.out(  931): (HTTPLog)-Static: isSBSettingEnabled false
    W/Firestore(  931): (21.4.2) [Firestore]: Write failed at users/b4WRYgXae8QIq9e3jTHscMPjvtk1: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
    E/flutter (  931): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(Error performing setData, PERMISSION_DENIED: Missing or insufficient 

1 Ответ

1 голос
/ 30 апреля 2020

В правилах безопасности resource относится к существующим данным в документе. Если нет существующего документа, то там нет никакого значения, и любые проверки его содержимого не пройдут, правило отклонит доступ.

Данные входящего документа находятся в request.resource, поэтому вы можете изменить свое правило следующим образом:

allow write: if (request.auth.uid == request.resource.data.uid);

Это потребует от клиента всегда предоставлять поле uid, соответствующее его собственному идентификатору авторизации для документов в коллекции пользователей.

...