在我的应用程序中,我使用了一个名为Polls_Coll的集合
这是我的允许函数
Polls_Coll.allow({
insert:function(){
return true;
},
update:function(userId, doc, fields, modifier){
return (doc.owner===userId);
},
remove:function(){
return true;
}
});在登录到我的帐户后,我插入了一份文档。
当我试图从客户端更新该文档值时
var option_data=Polls_Coll.findOne({_id:this._id}).option2[0].pd;
var u_name=Meteor.user().profile.name;
Polls_Coll.update({_id:this._id,"option2.pd":option_data},{$push:{"option2.$.ids":u_name}});它显示了untrusted code may update using id only错误,但是当我试图从服务器端插入它时,它是工作的,这里是我如何将文档插入到集合中的。
Polls_Coll.insert({question: quest,
option1:[{pd:op1,ids:[]}],
option2:[{pd:op2,ids:[]}],
option3:[{pd:op3,ids:[]}],
option4:[{pd:op4,ids:[]}]
});为什么这些值没有从客户端更新。
发布于 2014-02-11 06:28:19
来自文档中的这部分:
不可信代码包括客户端代码,如事件处理程序和浏览器的JavaScript控制台。 不受信任的代码只能同时修改由_id指定的单个文档。
所以,我相信,唯一允许的选择是一个_id。您可以使用$set操作符实现相同的结果,如下所示:
var poll = Polls_Coll.findOne({_id: this._id});
poll.option2[0].ids.push(Meteor.user().profile.name);
Polls_Coll.update({_id: this._id}, {$set: {option2: poll.option2}});发布于 2014-02-11 06:30:54
Meteor处理受信任代码的update()差异(在服务器上),而对不信任代码(在客户端上)处理不同。
不受信任的代码只能同时修改由_id指定的单个文档。-来自http://docs.meteor.com/#update
update()选择器中的任何其他条件都将允许您通过尝试多个选择器来了解db对象中的内容,因此开发组已经消除了这种可能性。如果需要在更新之前验证是否满足了其他条件,那么请使用findOne()进行检查。
https://stackoverflow.com/questions/21694289
复制相似问题