Reputation: 4817
I am Learnign Meteor and came across this situation i was following along a Meteor tutorial on tuts plus. the code is exactly the same in video the update of collection occurs but in my browser it shows this error:
Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403]
The code is here:
Template.person.events({
'click': function (e, t) {
Session.set("edit-"+ t.data._id, true);
},
'keypress input': function(e,t){
if(e.keyCode === 13){
var docid = Session.get("edit-"+ this._id);
People.update(t.data, {$set: {name: e.currentTarget.value}});
Session.set("edit-"+ t.data._id, false);
}
}
});
Upvotes: 8
Views: 5886
Reputation: 75945
For code that runs on the client side/browser side you can only use an _id
field as the query. On the server you can run it as you please.
Modify your code so you get the document first then use its _id
to perform an update.
var person = People.findOne(t.data);
People.update({_id: person._id}, {$set: {name: e.currentTarget.value}});
I assume t.data
is some kind of query? If its an _id
try using {_id: t.data
as the query instead. Either way so long as the selector of the update
only uses an _id
it should be fine.
The reason this might work on the tutorial you're following is this change was introduced more recently to lock down security.
Upvotes: 16
Reputation: 21
Template.person.events({
'click': function (e, t) {
Session.set('edit-' + t.data._id, true);
},
'keypress input' : function(e, t) {
if (e.keyCode == 13) {
People.update(t.data._id, { $set: { name: e.currentTarget.value }});
Session.set('edit-' + t.data._id, false);
}
}
});
Upvotes: 0