Итак, я немного запутался в Meteor.js. Я создал сайт с ним для тестирования различных концепций, и он отлично работал. После того, как я удалил «небезопасный» и «автопубликацию», я получаю несколько ошибок «отказано в доступе» при попытке получить и отправить на сервер. Я считаю, что это как-то связано со следующим фрагментом:
Template.posts.posts = function () {
return Posts.find({}, {sort: {time: -1}});
}
Я думаю, что он пытается получить доступ к коллекции напрямую, что ему было разрешено делать с включенными «небезопасными» и «автопубликацией», но как только они были отключены, ему было отказано в доступе. Еще одна часть, которую я считаю проблематичной:
else {
Posts.insert({
user: Meteor.user().profile.name,
post: post.value,
time: Date.now(),
});
Я думаю, что происходит то же самое: он пытается получить прямой доступ к коллекции, что ему не разрешено.
Мой вопрос в том, как мне изменить его так, чтобы мне не нужны были «небезопасные» и «автопубликации»?
Спасибо.
ИЗМЕНИТЬ
Финал:
/**
* Models
*/
Posts = new Meteor.Collection('posts');
posts = Posts
if (Meteor.isClient) {
Meteor.subscribe('posts');
}
if (Meteor.isServer) {
Meteor.publish('posts', function() {
return posts.find({}, {time:-1, limit: 100});
});
posts.allow({
insert: function (document) {
return true;
},
update: function () {
return false;
},
remove: function () {
return false;
}
});
}
insert:function(userId, document)
илиupdate: function(userId,doc,fieldNames,modifier)
, как вы передаете эти аргументы? И вы делаете это с клиента или сервера? 24.03.2015posts.remove({key: value})
, то функция, которую вы передаетеposts.allow({remove: .... })
на стороне сервера, будет вызываться с идентификатором пользователя клиента и документом, который они пытаются удалить. Если эта функция возвращаетtrue
, им разрешено ее удалить. В противном случае документ остается.update
иinsert
ведут себя одинаково 25.03.2015