Правила Firebase, разрешающие удаление, если имя пользователя в поле документа равно имени пользователя для входа - PullRequest
0 голосов
/ 04 мая 2020

введите здесь описание изображения Нужна помощь в добавлении правил безопасности в мою базу данных firebase. Я хочу разрешить удаление сообщения только в том случае, если аутентифицированный пользователь равен полю имени пользователя в документе сообщений. Это моя база данных сообщений:

enter image description here

Я пробовал много способов добавлять правила, но безуспешно. Приведенный ниже дает мне сообщение «нет зарегистрированного пользователя, пожалуйста, подождите», когда я пытаюсь создать документ, но удаление работает, даже если у сообщения есть другое имя пользователя.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{username} {
      allow read, write;
        allow delete: if request.auth == resource.data.username;
    }
  }
}

Я также пробовал ниже, и теперь я могу Не создавать и не удалять:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{username} {
      allow read, write
      allow delete: if get(/databases/$(database)/documents/posts/$(request.auth.uid)).data.username == request.auth.uid

    }
  }
}

Любая помощь будет принята с благодарностью. Спасибо.

Я добавил изображение в свою базу данных, но оно не отображается. Кроме того, пожалуйста, посмотрите мой код ниже:

        fabDelete.setOnClickListener {

        firestoreDb = FirebaseFirestore.getInstance()

        firestoreDb.collection("posts")
            .whereEqualTo("image_url", imageUrl)
            .get()
            .addOnSuccessListener { documents ->
                for (document in documents) {
                    document.reference.delete()
                    Toast.makeText(this, "Image Deleted", Toast.LENGTH_SHORT).show()
                    Log.d(TAG, "HVMSG - ${document.id} => ${document.data}")
                }
            }
            .addOnFailureListener { exception ->
                Toast.makeText(this, "Image Delete Failed", Toast.LENGTH_SHORT).show()
                Log.w(TAG, "Error getting documents: ", exception)
            }
    }

Кроме того, если у меня нет правила удаления в Firebase, тогда Create и Delete Document работают нормально, но я хочу ограничить удаление только владельцем документа.

Я добавил поле uid в базу данных сообщений для хранения UID Firebase, и все же кто угодно может его удалить. Изменены правила, как показано ниже:

    service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
        allow delete: if request.resource.data.uid == request.auth.uid;
    }
    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...