Ошибка получения разрешения при создании документа Firestore

Я пытаюсь безопасно создать документ Firestore, не требуя аутентификации пользователя, и для этого определил следующее правило:

      allow create: if request.resource.data.deviceid == resource.id;

Согласно тому, что я прочитал от Google, это должно позволить создать документ, если ожидающая запись включает поле с именем DeviceID, которое соответствует идентификатору документа, что, как я думаю, я делаю (я подтвердил, что androidID идентичен идентификатору документа):

        data.put("DeviceID", androidID);
        mDevIDDocRef.set(data)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.d(TAG, "DocumentSnapshot successfully written!");
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                    public void onFailure(@NonNull Exception e) {
                    Log.w(TAG, "Error writing document", e);
                }
            });

Однако вышеперечисленное не работает с исключением разрешения. Что я делаю неправильно?

См. также:  Шаг 68: Поместите все под контроль версий~ Диомидис Спинеллис
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. FractalBob

    Во время оценки правила создания ресурс еще не существует, поэтому вам нужно прочитать его будущее значение: request.resource.data.whatever
    Чтобы получить доступ к автоматически сгенерированному идентификатору документа, вам необходимо прочитать его из пути к документу :

    match /myCollection/{docId} {
        allow create: if request.resource.data.deviceid == docId;
        ...
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: