在我的应用程序中,我使用的是名为 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:[]}]
});
为什么值没有从客户端更新。
答案 0 :(得分:0)
来自文档中的this部分:
不受信任的代码包括客户端代码,例如事件处理程序和浏览器的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}});
答案 1 :(得分:0)
Meteor处理update()
对于受信任代码(在服务器上)与对不受信任代码(在客户端上)不同。
不受信任的代码只能一次修改单个文档,由_id指定。 - 来自http://docs.meteor.com/#update
update()
选择器内的任何其他条件都允许您通过尝试多个选择器来了解db对象中的内容,因此开发组已消除了这种可能性。如果您需要在更新前验证是否符合其他条件,请使用findOne()
进行检查。