Meteor:有选择地向客户端公开应用程序范围内的集合元数据的首选方法? (即仪表板)

Meteor: Preferred method to selectively expose app-wide collection metadata to client? (i.e. for dashboard)

我想在我的 Meteor 应用程序中实现一个管理仪表板,显示用户数量、当前登录用户和来自其他集合的元数据(计数、绘图等)等数据。

由于我现有的出版物仅在客户端公开每个用户自己的 "stuff",而 users 出版物仅公开登录用户以确保安全,我想我需要一些新界面。

如果具有管理员权限的用户已登录,那么有条件地收集此数据并将其公开给客户端的最佳方式是什么?我在考虑一组方法来提供每个显示的参数,或者一个仪表板方法收集所有参数并将它们 returns 作为一个大的 JSON 对象......有没有更好的方法?

您提出的任何解决方案都可以;我认为这取决于每个人的性能特征,这可能需要您自己探索。

顺便说一下,如果你 return 这些在一个反应​​性整体 JSON 对象中,这取决于你如何构建它,你可能每次都必须重新 运行 整个计算有些事情发生了变化,这可能是低效的。将方法分开似乎会更好,因为您只会重新运行计算更改后的数据。

您可以查看 simple:reactive-method package or Discover Meteor pattern for using a Meteor method in a template helper 让这更容易一些。我建议的模式是这样的:

// lib JS
Meteor.methods({
  userCount: function() { 
    var user = Meteor.user();
    if (user && user.admin) { 
      return Meteor.users.find().count();
    }
  }
});

// Client JS
Template.dashboard.helpers({
  userCount: function() { 
    return ReactiveMethod.call('userCount');
  },
  isAdmin: function() { return Meteor.user().admin; }
});

// HTML 
<template name='dashboard'>
  {{#if isAdmin}}
     There are {{userCount}} users.
     ... <!-- any other stuff you want -->
  {{/if}}
</template>