Meteor - 仅为管理员将所有用户发布到客户端

时间:2013-12-18 13:59:51

标签: mongodb templates meteor

我对Meteor有以下问题: 我有一个管理员,需要查看所有注册用户。 但是所有其他用户都不应该有能力看到其他用户。 因此,我在服务器端发布了以下代码

Meteor.publish("adminUsers", function(){

   var result; 
   if (Roles.userIsInRole(this.userId, ["admin"]))
   {
        result = Meteor.users.find();
   }
   //console.log(result);
   return result;
});

在客户端,我用

订阅了这个
Meteor.subscribe("adminUsers");

并且

AllUsers = new Meteor.Collection("adminUsers");

现在我希望使用以下代码获取模板中的所有用户:

Template.adminUserverwaltung.AllUsers = function(){
console.log(AllUsers.find());
return AllUsers.find();
}

并使用以下代码在模板中显示结果:

    <template name="adminUserverwaltung">
  {{#each AllUsers}}
    {{this.username}}
  {{/each}}
</template>

但遗憾的是它无法正常工作......任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

订阅集合时,订阅名称为adminUsers,但用户集合仍为Meteor.users已定义。

所以只需更改它就可以使用

Template.adminUserverwaltung.AllUsers = function(){
    return Meteor.users.find();
}

答案 1 :(得分:2)

你几乎就在那里......这个答案使用了meteor-roles包作为问题中提出的OP。

Meteor.publish("adminUsers", function(){
   var result = [];
   if (Roles.userIsInRole(this.userId, ["admin"])) {
        result = Meteor.users.find();
   } else {
        this.stop();
        // YOUUU SHALL NOT.... PASS!!!  ~Gandalf
   }
   return result;
});

在客户端,订阅:

Meteor.subscribe("adminUsers");

不要这样做。省略它。 Meteor.users是您的收藏。

// NOO!! AllUsers = new Meteor.Collection("adminUsers");

现在我希望使用以下代码获取模板中的所有用户:

Template.adminUserverwaltung.helpers = {
    AllUsers: function(){
        return Meteor.users.find();
    }
};

并使用以下代码在模板中显示结果:

<template name="adminUserverwaltung">
{{#each AllUsers}}
    {{this.username}}
{{/each}}
</template>

现在应该可以了。 :)

答案 2 :(得分:1)

以下是您可以做的事情:

if (Meteor.isClient) {
  Meteor.subscribe("allUsers");
  Template.hello.users = function() {
    return Meteor.users.find();
  }
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    Meteor.publish("allUsers", function(){
      var user = Meteor.user();
      if (user && user.emails[0].address === 'root@localhost'){
        return Meteor.users.find();
      }
      return null;
    });
  });
}

这样,只有用户root@localhost才会看到所有用户。其他只会看到自己。

meteor docs中有一个自定义用户集合发布的示例。