我一直收到这个错误:
Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403]
这是代码:
Template.notifications.events({
'click a.clearAll':function(event){
console.log("hey");
Notifications.update({{userId:Meteor.userId()},{$set:{read:true}},{multi:true});
}
})
我还设置了更新权限:
Notifications.allow({
insert: function(){
return true;
},
update: function(){
return true;
}
});
为什么不让我更新?
答案 0 :(得分:1)
出现此错误的原因是您从客户端进行更新,服务器将其视为'不受信任的代码。
除非您尚未删除不安全的软件包并且未制定任何权限规则,否则它将起作用。我建议总是通过meteor remove insecure
删除不安全的包并使用方法/调用来执行客户端发起的服务器功能,这是一个好习惯。
您需要从客户端向服务器发出'call',并在methods函数内执行更新命令。
客户端:
Template.notifications.events({
'click a.clearAll':function(event){
Meteor.call('updateDocs',
function(error, result) {
if (error) {
console.log(error);
}
else {
console.log('done');
}
});
}
});
服务器:
Meteor.methods({
updateDocs: function() {
var userId = this.userId
if (userId) {
Notifications.update({{userId: userId},{$set:{read:true}},{multi:true});
}
return;
}
});
答案 1 :(得分:1)
@meteorBuzz是正确的。如果您仍希望从客户端进行更新,则可以使用forEach
:
Notifications.find({ userId:Meteor.userId() }).forEach(function(n){
Notifications.update({ _id: n._id },{$set:{ read:true }});
});