O usuário deletou a postagem "Sobre" de uma categoria

Um usuário excluiu todas as suas postagens, uma das quais era a postagem “sobre” uma categoria. Restauramos a postagem e alteramos a propriedade para a conta do Sistema, no entanto, ela ainda aparece como “excluída” para um administrador e mostra um erro quando um não administrador visita a postagem:

A postagem em questão (que gera erro): About the Music category - Music - KGLW.net Forum

A categoria: Music - KGLW.net Forum

Existe uma maneira de corrigir isso?

(Todas as postagens “sobre” da categoria devem ser atribuídas à conta do Sistema para evitar esse cenário?)

3 curtidas

Olá,

Não tenho certeza se isso funcionaria, mas tente reconstruir o HTML da postagem. Você pode fazer isso clicando nos 3 pontos –\u003e Chave inglesa –\u003e “Reconstruir HTML”.

1 curtida

Não ficou totalmente claro como eles conseguiram excluir um tópico “Sobre”, já que eles deveriam ser indeléveis. :thinking:

Você pode detalhar um pouco mais como isso aconteceu? Eles criaram a categoria?

4 curtidas

Quando você usa o botão Excluir todas as postagens na página de administração do usuário, o tópico sobre é excluído. (Em outros casos, a propriedade é transferida para @system)

Você poderia criar uma nova categoria e mover todos os tópicos para ela e excluir a categoria antiga. Mas isso é mais uma solução alternativa do que uma correção.

Essa é uma consequência infeliz. :thinking:

Embora eu tenha acabado de reproduzir isso em meu site de teste e a restauração tenha feito com que ele voltasse imediatamente, então não tenho certeza sobre qual é esse problema em particular.

É possível trocar o topic_id do tópico “Sobre” por um novo usando o console Rails, mas a “nova troca de categoria” pode ser uma opção mais fácil através da interface do usuário.

2 curtidas

O problema ocorre quando você altera a propriedade para sistema antes de restaurar a postagem.

2 curtidas

Posso precisar de um passo a passo para garantir que estamos fazendo a mesma coisa. Parece que o usuário foi excluído em vez de apenas as postagens?

3 curtidas

Existem dois problemas que são particularmente infelizes em combinação.

  1. Ao usar “excluir todas as postagens” na página de administração do usuário, a postagem “sobre a categoria” é excluída. (Mas você pode restaurá-la)

  2. Ao excluir postagens onde o autor também foi excluído, e você altera a propriedade antes de restaurar a postagem, você não pode restaurar a postagem. (Como solução alternativa, você pode excluir o tópico e restaurá-lo. Isso restaura a primeira postagem)

Portanto, quando você:

  • cria um usuário de teste e uma categoria de teste,
  • torna o usuário de teste o proprietário do tópico “sobre a categoria”,
  • exclui todas as suas postagens da página de administração do usuário,
  • (opcional) cria outro tópico de propriedade do usuário de teste,
  • (opcional) responde a ambos os tópicos usando um usuário diferente,
  • exclui o usuário de teste,
  • altera a propriedade do tópico “sobre” (e do outro tópico),
  • tenta restaurar as postagens,

você recebe um erro, porque não pode restaurar a postagem. Observação: as respostas nos tópicos são visíveis para outros usuários, mas eles não podem ver a primeira postagem.

A solução alternativa para 2 não funciona, porque você não tem permissão para excluir tópicos “sobre”.

6 curtidas

Sim, acredito que o usuário criou a categoria.

“Reconstruir HTML” não parece ter mudado nada.

Suponho que poderíamos criar uma nova categoria e fazer uma troca, no entanto, isso significaria que os usuários que se inscreveram/silenciaram/o que quer que seja na categoria original precisariam refazer isso com a nova?

Não tenho medo do console Rails, então se atribuir um novo topic_id for a maneira mais “correta” de estruturar as coisas, então estou inclinado a fazer isso. Mas eu apreciaria alguma orientação com os comandos específicos a serem executados; seria algo como Category.find(10).topic_id = 723…?

Por outro lado:

…talvez esta seja uma maneira mais rápida de resolver? (Embora eu só veja “Arquivar Tópico” e não “Excluir Tópico” no menu do ícone de chave inglesa…)

Ainda não testei isso tão minuciosamente quanto outros aqui (obrigado!!), mas me parece que a correção para o problema declarado na primeira postagem é bastante simples.

  • não permitir a exclusão de tópicos sobre em administração de usuários (por moderadores/administradores do site)

Quando o acima for tentado, impeça-o e exiba uma mensagem de erro informativa. Estou movendo para Bug porque é um bug que os tópicos sobre podem ser excluídos no caso acima.

Acabei de criar um usuário de teste e o usei para criar uma categoria e, em seguida, excluí o usuário da administração do usuário. Ele me permitiu excluir o usuário diretamente, mesmo que ele tivesse um tópico. A autoria do tópico sobre foi transferida para o usuário do sistema! Portanto, pelo menos esse caso de uso parece ser bastante seguro a esse respeito.

Também tentei o caso de autoexclusão (tenho que rebaixar o usuário primeiro para ver o botão excluir conta). Excluir esse usuário também deu a autoria do tópico ao sistema. Além disso, vejo que o padrão para delete user self max post count está definido como 1, o que significa que, por padrão, não é possível um usuário se excluir se tiver mais de um tópico. Portanto, estamos seguros aqui de qualquer maneira.

E testei a exclusão do usuário via administração do usuário. Curiosamente, enquanto havia apenas um tópico sobre, eu não obtive o botão de exclusão de postagem. Mas depois de criar um segundo tópico, obtive o botão de exclusão de postagem. Selecioná-lo e digitar o texto longo para confirmar funcionou - consegui excluir as postagens do usuário, incluindo o tópico sobre. Finalmente, uma reprodução! :wink:

E, finalmente, também consegui excluir o tópico sobre usando ações em massa. Outra reprodução! Oops, agora vejo que não tenho reprodução de ações em massa excluindo tópicos sobre. Simplesmente falha em fazê-lo silenciosamente.

Dado o acima, podemos ignorar os casos de exclusão de usuário (via administração de usuário e autoexclusão) porque a autoria é dada ao sistema.

1 curtida

Eu também tentei mover a postagem “sobre” para um tópico diferente. Funciona e então um temporizador de exclusão aparece, mas o tópico não é excluído após X dias. O temporizador simplesmente desaparece. Então, isso funciona bem.

1 curtida

Você conseguiu resolver sua situação, @alxndr?

2 curtidas

Isso pode muito bem impedir que isso aconteça no futuro.

Dito isso, como devo me recuperar da situação agora, onde os usuários veem uma página de erro ao tentar ler a postagem “Sobre” desta categoria, mesmo que a postagem seja de propriedade do usuário system?

Ainda não tentei nada; eu estava esperando que alguém comentasse com “sim, esse é o comando correto” ou “não, não faça isso, vai arruinar tudo” primeiro…

2 curtidas

Acredito que este seja o formato que usei quando tentei há um tempo:

Category.where(id: CAT_ID).update(topic_id: NEW TOPIC_ID)

Embora eu também esteja me perguntando se seria possível restaurar aquele tópico original usando a API. :thinking:

@alxndr você pode confirmar que está auto-hospedando, não em nossa hospedagem? Se você estiver em nossa hospedagem ou mudar para nossa hospedagem, poderá entrar em contato com nossa equipe de suporte e um de nossos associados técnicos o ajudará a corrigir isso.

Se eu estivesse em sua posição, eu apenas criaria uma nova categoria e moveria todos os tópicos para a nova categoria. Isso parece o mais direto.

Se você decidir experimentar o console do Rails ou a API, você está em território desconhecido, então certifique-se de fazer um backup completo do seu site primeiro, caso precise reverter a alteração!

1 curtida

Ha :slight_smile: Você parece não confiar no meu conselho @tobiaseigen :slight_smile:

Usar a API seria uma opção mais segura do que o console do Rails, só não está claro se ela conseguiria recuperar este tópico específico devido às circunstâncias.


Eu não tinha certeza se a API funcionaria, pois tentar algo semelhante na interface do usuário foi bloqueado, mas parece que tive algum sucesso (:partying_face:).

Neste caso, usei o endpoint para recuperar a postagem em vez de recuperar o tópico (que é o que a opção de restaurar a exclusão na postagem estava tentando fazer):

/posts/POST_ID/recover

4 curtidas

Sim, auto-hospedando.

1 curtida

O botão “restaurar esta postagem” parece usar este endpoint, no entanto, ele retorna um erro 403, com errorThrown em branco e textStatus: "error".

No entanto, você está dizendo que usar a mesma rota via API, e não a UX da web, funcionou?

Do meu teste, o botão de restaurar estava tentando usar o endpoint de recuperação de tópico (/t/TOPIC_ID/recover) e estava retornando 403. Mas pareceu funcionar quando usei a versão de recuperação de posts em vez disso.

Você pode verificar para ter certeza?

2 curtidas

Ah, obrigado pelo esclarecimento, você está correto.

Não tenho certeza de como identificar o ID individual da Postagem; o ID da Categoria é 10 e acho que o ID do Tópico é 723?
Atualização: Aha, encontrei! Há um data-post-id no elemento DOM <article>

Não vejo este endpoint na documentação da API… deveria ser um PUT? com algum dado?
Atualização: sim um PUT, sem dados — funcionou! Obrigado @JammyDodger !!

2 curtidas