Entender “No permitido. El código que no es de confianza solo puede actualizar documentos por ID. “Error de Meteor

En Meteor 0.5.8 se introdujo el siguiente cambio:

Las llamadas a la actualización y eliminar las funciones de recostackción en código que no es de confianza ya no pueden usar selectores arbitrarios. Debe especificar una única identificación de documento al invocar estas funciones desde el cliente (que no sea un trozo de método).

Entonces, si desea enviar actualizaciones arbitrarias a la base de datos desde la consola del cliente, debe hacer algo como:

People.update({_id:People.findOne({name:'Bob'})['_id']}, {$set:{lastName:'Johns'}}); 

En lugar de:

 People.update({name:'Bob'}, {$set:{lastName:'Johns'}}); 

Pensé que este problema de seguridad se controlaba estableciendo las funciones Meteor.Collection.allow y .deny junto con los paquetes autopublish e inseguro. Me gustó poder interactuar con la base de datos desde Chrome Console de Chrome.

¿Cuál es la motivación para los cambios en Meteor 0.5.8?

Del blog Meteor :

Cambios para permitir / denegar reglas

Comenzando en 0.5.8, el código de solo cliente como los manejadores de eventos solo puede actualizar o eliminar un único documento a la vez, especificado por _id. El código de método todavía puede usar selectores de Mongo arbitrarios para manipular cualquier cantidad de documentos a la vez. Para ejecutar actualizaciones complejas desde un controlador de eventos, solo defina un método con Meteor.methods y llámelo desde el controlador de eventos.

Este cambio simplifica significativamente la API permitir / denegar, fomenta una mejor estructura de la aplicación, evita un posible ataque DoS en el que un atacante podría forzar al servidor a hacer un gran trabajo para determinar si una operación está autorizada y soluciona el problema de seguridad informado por @ jan-glx

Para actualizar su código, cambie sus manejadores de permitir y denegar para tomar un único documento en lugar de una matriz de documentos. Esto debería simplificar significativamente tu código. También verifique si tiene alguna actualización o elimine llamadas en sus controladores de eventos que usan selectores Mongo (esto es bastante raro), y si es así, muévalos a métodos. Para obtener detalles, consulte la actualización y elimine documentos.

Así que, básicamente, desde mi punto de vista, casi nunca desea que el comportamiento sea capaz de actualizar y eliminar conjuntos arbitrarios de documentos del cliente sin ningún conocimiento específico (como el ID del documento).

Al crear prototipos, lo cual supongo que es lo que estás haciendo, supongo que puede ser un estorbo, pero si alguna vez quieres poner tu código en producción, creo que los pros superan a los contras. Esto también se reduce a las declaraciones de seguridad ( allow y deny ) que son más fáciles de especificar después de este cambio.

Espero que te haya dado más información.