mongodb 查询 - Meteor.users.find() - 如何在 alanning:roles 包中按组过滤



我正在尝试在我的网站上创建一个管理部分。管理员可以转到管理页面并查看其组中用户的表。我只想发布该管理员组中的用户。例如,他在['足球']组中,但我不希望他看到['曲棍球']组中的所有用户。一个用户可以在多个组中,但一旦我了解如何查询它,我应该能够弄清楚这一点。

无论如何,这是我到目前为止所拥有的:

Meteor.publish('users', function() {
  groups = Roles.getGroupsForUser(this.userId)
  group = groups[0] //Just get the first group for now
  // If the user is an admin of any group (the first one in the array)
  if (Roles.userIsInRole(this.userId, ['admin'], group)) {
    return Meteor.users.find({roles: {$in: groups}}, 
                             {fields: {emails: 1,
                                       createdAt: 1,
                                       roles: 1
                                      }
    });
  } else {
    console.log('null')
    return null;
  }
});

我在路由器中的订阅:

Meteor.subscribe("users")

现在当我替换:

{roles: {$in: groups}} 

只需:

{}

它有效,但我的表包含所有用户,而不仅仅是组的用户。我应该提出什么查询才能完成这项工作?我正在使用角色包。

您可以执行简单的查询并添加字段,排序,所需的内容;-)

Meteor.users.find({'roles.__global_roles__':'admin'}).fetch()

__global_roles 是默认组。请将其替换为所需的组。

http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element

这段代码有大约 5% 的机会开箱即用,因为我没有集合来测试它,我无法运行这段代码,我没有角色包,我没有你的用户数据库,而且我以前从未在光标上做过 .map,哈哈。

/

服务器/方法.js

Meteor.methods({
  returnAdminUsers: function(){
    var results = [];
    var results = Roles.getUsersInRole(['admin']).map(function(user, index, originalCursor){
      var result = {
        _id: user._id,
        emails: user.emails,
        createdAt: user.createdAt,
        roles: user.roles
      };
      console.log("result: ", result);
      return result;
    });
    console.log("all results - this needs to get returned: ", results);
    return results;
  }
})
/

客户端/某事.js

Meteor.call("returnAdminUsers", function(error, result){
  if(error){
    console.log("error from returnAdminUsers: ", error);
  } else {
    Session.set("adminUsers", result);
  }
});

然后在您的助手中:

Template.somethingsomething.helpers({
  adminUsers: function(){ return Session.get("adminUsers") }
});

/client/somethingsomething.html

{{#each adminUsers}}
  The ID is {{_id}}
{{/each}}

如果您使用的是 meteor-tabular/TabularTables,此答案会有所帮助:

仅显示具有流星表格表中特定角色的用户

如果要检查此类组的所有规则:

  Meteor.users.find({
    'roles.myrole': {$exists : true}
  });

或者只有几个:

  Meteor.users.find({
    'roles.myrole': {$in: ['viewer', 'editor']}
  });

最新更新