FireStore: позволить пользователям обновлять, удалять только свои данные - PullRequest
0 голосов
/ 24 июня 2018

Это мои текущие правила безопасности:

service cloud.firestore {
  match /databases/{database}/documents {
  match /tournaments/{tournament=**} {
    allow update, delete: if request.auth.uid == resource.data.author;
    allow create: if request.auth.uid != null;
    allow read: if true;
  }
  }
}

Все работает, только обновление или удаление не работает из-за "Отсутствует или недостаточно разрешений"

Вот мой код для этого

            mDocRef
                .update(key, score)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "DocumentSnapshot successfully updated!");
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "Error updating document", e);
                    }
                });

mDocRef относится к документу с путем "tournaments / tourIDID / aColletion / aDocument"

Вот код для создания mDocRef:

            mTournamentDocRef = mTournamentColRef.document();
            mDocRef = mTournamentDocRef.collection("aCollection").document();

Некоторые вещи, на которые следует обратить внимание:

  • пользователь во время всего процесса вошел в систему через firebase
  • Я пытался использовать .where ("author", "==", user.uid)но получил ошибку «невозможно решить метод»

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 15 июля 2018

Я проверил документацию, вот те правила, которые вы ищете:

match /users/{userId} {
  allow read, update, delete: if request.auth.uid == userId;
  allow create: if request.auth.uid != null;
}

И ссылка на документацию в качестве ссылки: https://firebase.google.com/docs/firestore/security/rules-conditions?authuser=0

0 голосов
/ 24 июня 2018

Я добавил идентификатор пользователя firebase к каждому документу, который создается для получения желаемых результатов

 tournamentData.put("author", user.getUid());
 data.put("author", user.getUid());
...