Quantcast
Channel: Comparar IDs con mongodb en nodejs - Stack Overflow en español
Viewing all articles
Browse latest Browse all 2

Comparar IDs con mongodb en nodejs

0
0

Estoy haciendo un sistema de publicaciones y comentarios.

Cada publicación tiene su código para crearla, con su respectivo _id, un usuario que la crea, y el texto y demás cosas.

A su vez, cada publicación va a contener comentarios, con su respectivo _id, usuario, publicación al que se refiere, y un texto.

Ambos códigos están creados y funcionan correctamente.

Lo que necesito hacer es crear códigos tanto para la edición, como para la eliminación de las publicaciones y comentarios, por los respectivos usuarios que los crearon en un principio.

Para empezar, tanto el login como el registro de usuarios utilizo middlewares de autenticación, por lo que para acceder al _id del usuario que está logueado, lo hago con req.user.sub;

Tengo, por ejemplo, el siguiente código:

function deleteComment(req, res){    var commentId = req.params.id;    Comment.find({'user': req.user.sub, '_id': commentId}).remove(err => {        if(err) return res.satus(500).send({message: 'Error al borrar el comentario'});        return res.status(200).send({message: 'Se ha eliminado el comentario'});    });}

Este código tiene como finalidad eliminar un comentario. Lo que sucede es lo siguiente:Paso como parámetro en la url el _id del comentario, en Comment.find busco el comentario con ese _id y con el mismo _id de usuario logueado que lo tomo desde req.user.sub y que está en user en el comentario. Si ambos coinciden, se borra el comentario y devuelve el mensaje en el status(200).Ahora, si estoy logueado con otro usuario, y el req.user.sub no coincide con el user del comentario, me devuelve el mismo mensaje, aunque el comentario no se elimina.

Lo que pensaba hacer es una especie de if que compare el usuario logueado con el user del comentario, pero no logro acceder al usuario del comentario.

Este es el modelo de los comentarios:

var CommentSchema = Schema({    user: { type: Schema.ObjectId, ref: 'User'},    publication: { type: Schema.ObjectId, ref: 'Publication'},    text: String,    created_at: String});

En conclusión, lo que necesito hacer es buscar la manera de comparar el req.user.sub que me devuelve el _id del usuario que está logueado, compararlo con el campo user del comentario y realizar una u otra acción según corresponda.

Si el el _id del usuario coincide con el user del comentario, se podría eliminar o editar.

Si no coinciden, devolver el mensaje: 'No tienes permiso para realizar esta acción'.

Muchas gracias.

EDIT:

Este es el script que estoy probando:

function editComment(req, res){    var commentId = req.params.id;    var userId = req.user.sub;    var update = req.body;    Comment.findByIdAndUpdate({'user': req.user.sub, '_id': commentId}, update, {new: true}, (err, commentUpdated) => {        if(err) return res.status(500).send({message: 'Error al editar el comentario'});        if(!commentUpdated) return res.status(404).send({message: 'No se pudo editar el comentario'});        return res.status(200).send({            comment: commentUpdated        });    });}

Efectivamente, me deja editar el comentario, pero cuando estoy logueado con otro usuario que no es el user del comentario, el comentario se actualiza de todas maneras... la idea es que no lo deje actualizar


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images