파이어베이스 관련 질문입니다.

24.03.25 19:28 작성 조회수 25

0

게시판 기능을 만들고 있는데 파이어베이스에 저장된 데이터를 불러와서 작성자 A는 자신의 글만 삭제가 가능하고 다른 작성자의 글은 삭제를 못하게 하고싶은데 코드를 계속 수정하며 해보았지만 A도 A글을 삭제 못하고B도 A의 글을 삭제할 수 있는 현상이 계속 일어나고 있어서 어디가 문제인건지 궁금합니다 코드는 이렇습니다.

private fun deleteContent(contentModel: ContentModel) {
    val contentId = contentModel.id // 게시글의 고유한 ID

    // 삭제 권한 확인 없이 직접 삭제
    database.child(contentId).removeValue()
        .addOnSuccessListener {
            // 삭제가 성공한 경우
            val intent = Intent(this@ContentDetailActivity, MainActivity::class.java)
            intent.putExtra("fragmentToLoad", "contentListFragment")
            startActivity(intent)
            finish() // ContentDetailActivity 종료
        }
        .addOnFailureListener {
            // 삭제가 실패한 경우
            // 에러 처리를 수행하거나 사용자에게 알림
            Toast.makeText(this, "삭제 실패", Toast.LENGTH_SHORT).show()
        }

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.26

안녕하세요, 인프런 AI 인턴입니다.
제공해주신 정보에 기반하여 파이어베이스 관련 질문에 답할 수 있는 내용은 없습니다. 하지만, 질문하신 내용과 관련하여 게시글 삭제 권한 문제를 해결하시려면, 현재 사용자가 게시글의 작성자와 동일한지 확인하는 단계가 필요합니다. Firebase Authentication을 사용하여 현재 로그인한 사용자의 정보를 가져올 수 있고, 이를 통해 사용자가 해당 게시물의 작성자인지 확인 후 삭제하도록 로직을 수정해야 합니다. 예를 들어, FirebaseAuth.getCurrentUser() 메소드를 통해 현재 사용자의 ID를 가져온 후, 이 ID가 게시글 작성자의 ID와 일치하는지 검사하는 코드 조건을 추가하는 것이 필요합니다. 게시글의 작성자 ID 정보를 게시글 데이터와 함께 저장하고 있어야 이러한 비교가 가능합니다.

다음은 수정할 수 있는 간단한 예시 코드입니다:

private fun deleteContent(contentModel: ContentModel) {
    val currentUser = FirebaseAuth.getInstance().currentUser
    if (contentModel.writerId == currentUser?.uid) { // writerId는 게시글 작성자의 ID를 나타냅니다.
        // 사용자가 본인의 글을 삭제하는 경우
        val contentId = contentModel.id // 게시글의 고유한 ID
        database.child(contentId).removeValue().addOnSuccessListener {
            // 삭제가 성공한 경우
            val intent = Intent(this@ContentDetailActivity, MainActivity::class.java)
            intent.putExtra("fragmentToLoad", "contentListFragment")
            startActivity(intent)
            finish() // ContentDetailActivity 종료
        }.addOnFailureListener {
            // 삭제가 실패한 경우
            Toast.makeText(this, "삭제 실패", Toast.LENGTH_SHORT).show()
        }
    } else {
        // 사용자가 본인의 글이 아닌 다른 사람의 글을 삭제하려는 경우
        Toast.makeText(this, "본인의 글만 삭제할 수 있습니다.", Toast.LENGTH_SHORT).show()
    }
}

이 코드는 사용자가 본인의 글만 삭제할 수 있도록 확인하는 예시입니다. 실제 앱에 맞게 writerId와 다른 변수명을 적절히 사용해 주시기 바랍니다.