Segundo o código apresentado no "Faça como eu fiz: Removendo um post do blog",
async remover (req, res) {
try {
let post
if (req.acesso.todos.permitido === true) {
post = await Post.buscaPorId(req.params.id)
} else if (req.acesso.apenasSeu.permitido === true) {
post = await Post.buscaPorIdAutor(req.params.id, req.user.id)
}
post.remover()
res.status(204)
res.end()
} catch (erro) {
return res.status(500).json({ erro: erro.message })
}
}
Ao tentar remover um post que não é do editor (por exemplo, post 1 pertence ao autor 1, logo com a pessoa 2 (que é um editor) e tento excluir o post 1, ele cai na função de buscar por autor (passando 1 no id e 2 no idAutor). Essa consulta não encontrará nenhum resultado, gerando um erro ao executar "post.remover()", do status 500 (que é do catch), pois ele não pode executar "remover" de um null, óbviamente porque não existe no banco um post de id 1 do autor 2.
Ok, ele não exclui nada, mas também não gera o erro esperado, que seria um erro de validação, mas sim um erro de NÃO ENCONTRAR esse post!
Qual seria a melhor forma de solução para esse caso? Procurar o post sempre e validar manualmente se ele é o mesmo id que o do Autor, ai gerar um erro de 403 'Forbidden'? Foi como fiz no código aqui...
async remover (req, res) {
try {
let post
post = await Post.buscaPorId(req.params.id)
if(!req.acesso.todos.permitido){
if(req.acesso.apenasSeu.permitido === true){
if (!post || post.autor !== req.user.id){
return res.status(403).json()
}
}
}
post.remover()
res.status(204)
res.end()
} catch (erro) {
return res.status(500).json({ erro: erro.message })
}
}