введите здесь описание изображения Нужна помощь в добавлении правил безопасности в мою базу данных firebase. Я хочу разрешить удаление сообщения только в том случае, если аутентифицированный пользователь равен полю имени пользователя в документе сообщений. Это моя база данных сообщений:
![enter image description here](https://i.stack.imgur.com/wx7oW.png)
Я пробовал много способов добавлять правила, но безуспешно. Приведенный ниже дает мне сообщение «нет зарегистрированного пользователя, пожалуйста, подождите», когда я пытаюсь создать документ, но удаление работает, даже если у сообщения есть другое имя пользователя.
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;
}
}
}