почему я не могу перезаписать документ, используя такие правила безопасности? - PullRequest
0 голосов
/ 26 марта 2020

Я сохраняю список Attendee как подколлекцию документа Event, используя этот код

        val attendeeRef = db.document("events/id").collection("Attendee").document(user.uid)
        val savedDataAttendee : HashMap<String,Any> = hashMapOf(
            FIRESTORE_USER_FIELD_UID to user.uid,
            FIRESTORE_USER_FIELD_FULLNAME to user.fullname
        )

        attendeeRef.set(savedDataAttendee)

, поэтому я сохраняю идентификатор пользователя в качестве имени документа, например enter image description here

здесь проблема.

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

вот правила, которые я использую

match /events/{eventID}/Attendee/{userID} { 
      allow list: if isSignedIn() && queryLimit() <= 20
      allow create, delete: if isSignedIn() && isBelongTo(userID)
    }

function isBelongTo(userId) {
      return request.auth.uid == userId;
    }

    function isSignedIn() {
      return request.auth != null;
    }

Я использую set, чтобы создать новый документ участника (или перезаписать, если пользователь был как участник), поэтому я предполагаю, что в моих правилах безопасности это вызовет allow create.

при создании нового документа участника (без перезаписи существующего документа) проблем не возникает *

...