【问题标题】:Meteor publish: admin can view all data, user only his dataMeteor 发布:管理员可以查看所有数据,用户只能查看他的数据
【发布时间】:2014-09-29 20:07:30
【问题描述】:

我有一个收藏(Collection2 包):

tickets = new Mongo.Collection("tickets");

如果管理员登录,我想通过模板显示所有用户票,否则只有当前用户票。

我的服务器代码(meteor-rules 包):

Meteor.publish('tickets', function(){
    if (Roles.userIsInRole(this.userId, ['admin'])){
        return tickets.find({},{sort:{deadline: 1}});
    }else{
        return tickets.find({_id: this.userId}, {sort:{deadline: 1}});
    }
});

我的客户代码:

Template.dashboard.helpers({
  tickets: function () {
    Meteor.subscribe('tickets');
  });

模板上什么也没发生...我做错了什么?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    您的模板助手必须返回实际数据,但在您的代码中您不返回任何内容,只需订阅您的票证。

    Template.dashboard.helpers({
      tickets: function () {
        // return a cursor fetching all tickets that were pushed to the client
        // thanks to the subscription
        return tickets.find();
      }
    });
    

    根据您的需要,您可能希望仅在订阅准备就绪时使用iron:router 来显示您的仪表板,否则它一开始将显示为未填充。

    【讨论】:

    • 感谢@saimeunt,但安装了自动发布后,现在返回所有票证,无需单独的管理员票证和用户票证。如果我删除自动发布所有消失... :-(
    • 尝试通过console.log在发布函数中调试游标的结果集:console.log(tickets.find(...).fetch());
    • 什么都没有出现...我在这里看看:meteorpedia.com/read/Understanding_Meteor_Publish_and_Subscribe 如果在发布方法中返回数据,似乎没有必要返回数据..
    • 现在可以使用了!我的查询错误 {_id:this.userId} 而不是 {user:this.userId} 在发布中。我还按照你的建议添加了 return ticket.find() @saimeunt。
    • 另外,仅供参考,我认为出版物中的排序没有任何作用。它只在助手中有效。
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 2016-10-31
    • 2014-01-16
    • 2016-03-21
    • 2014-07-25
    • 2016-06-11
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多