Getting this error in the console when I try upserting to a collection:
"update failed: Access denied. Upserts not allowed in a restricted collection."
Here are the allow rules I've specified:
if (Meteor.isClient) {
Meteor.subscribe('customers');
}
customers = Customers
if (Meteor.isServer) {
Meteor.publish('customers', function() {
return customers.find();
});
customers.allow({
insert: function (document) {
return true;
},
update: function () {
return true;
},
remove: function () {
return true;
}
});
}
Here is the upsert part:
Customer.prototype.create = function ( name, address, phone, cell, email, website, contact, shipping ) {
var attr = {
name : name,
address : address,
phone : phone,
cell : cell,
email : email,
website : website,
contact : contact,
shipping : shipping
};
Customers.upsert( Customers.maybeFindOne( attr )._id, attr );
return new Customer( attr );
};
This is the work-around I use (using underscore's defaults function):
Which assumes that
selector
is an object ID.This is a choice the development team has made.
The suggested solution is to write a method that wraps upsert. This makes the server request come from server code while the client code only runs for latency compensation. Example: