2015-02-15 5 views
0

Я хочу публиковать только данные, созданные пользователем вошедшего в систему. У меня есть следующие publish функции:Meteor публикует данные текущего пользователя

//server/collections/lists.js 

    Meteor.publish('lists', function(){ 
     if(this.userId){ 
      return listCollection.find({createdBy: this.userId}); 
     } else { 
      this.ready(); 
     } 
    }); 

, но когда я иду, чтобы создать документ в качестве вошедшего в систему пользователя, место на DOM, где шаблон должен быть оказанной «вспышки» с документом Ive создали, но то он исчезает. Что я делаю неправильно?

ответ

2

Это симптом попытки вставить на клиенте, не имея allow rule для вставки, а затем через секунду отбросив вложенную вставку. Попробуйте добавить что-то вроде этого под server каталогом:

listCollection.allow({ 
    insert: function (userId, doc) { 
    // the user must be logged in, and the document must be owned by the user 
    return (userId && doc.owner === userId); 
    } 
}); 

Обратите внимание, что вам нужно будет настроить правило для конкретного случая использования (например, вы не можете иметь owner поля). Например, вы можете просто return userId разрешить вставки от любого зарегистрированного пользователя.

В качестве альтернативы вы не можете настроить allow и вместо этого использовать method для выполнения вставки. Вообще говоря, это моя рекомендация - см. Мой ответ this question.

+0

является 'createdBy' конвенцией о метеоре, или это поле должно быть определено в коллекции? Я получил его из фрагмента учебника – redress

+0

Вы можете называть его как угодно. Я считаю, что «владелец» более распространен, но это вопрос вкуса. –

+0

, но чтобы быть ясным, я добавляю поле 'owner' в мое' listCollection = новое определение Meteor.Collection ('listCollection') 'и имея его' return Meteor.userId() '? – redress

Смежные вопросы