Meteor.users.find() - 如何在 alanning:roles 包中按组过滤
Meteor.users.find() - how to filter by group in alanning:roles package
我正在尝试在我的网站上创建一个管理部分。管理员可以转到管理页面并查看其组中的 table 个用户。我只想发布该管理员组中的用户。例如。他在 ['soccer'] 组中,但我不希望他看到 ['hockey'] 组中的所有用户。一个用户可以在多个组中,但一旦我了解如何查询它,我应该能够弄清楚。
无论如何,这是我目前的情况:
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}}
只有:
{}
它有效,但我的 table 包含所有用户,而不仅仅是一个组的用户。
我应该提出什么查询才能完成这项工作?我正在使用 alanning 的角色包。
这段代码有大约 5% 的机会开箱即用,因为我没有集合来测试它,我无法 运行 这段代码,我没有角色包,我没有你的users数据库,我也从来没有在游标上做过.map,哈哈
/server/methods.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;
}
})
/client/somethingsomething.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.users.find({'roles.__global_roles__':'admin'}).fetch()
__global_roles 是默认组。将其替换为您需要的组。
http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element
如果您正在使用 meteor-tabular/TabularTables,此答案可以提供帮助:
如果要查看此类群的所有规则:
Meteor.users.find({
'roles.myrole': {$exists : true}
});
或者只有几个:
Meteor.users.find({
'roles.myrole': {$in: ['viewer', 'editor']}
});
我正在尝试在我的网站上创建一个管理部分。管理员可以转到管理页面并查看其组中的 table 个用户。我只想发布该管理员组中的用户。例如。他在 ['soccer'] 组中,但我不希望他看到 ['hockey'] 组中的所有用户。一个用户可以在多个组中,但一旦我了解如何查询它,我应该能够弄清楚。
无论如何,这是我目前的情况:
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}}
只有:
{}
它有效,但我的 table 包含所有用户,而不仅仅是一个组的用户。 我应该提出什么查询才能完成这项工作?我正在使用 alanning 的角色包。
这段代码有大约 5% 的机会开箱即用,因为我没有集合来测试它,我无法 运行 这段代码,我没有角色包,我没有你的users数据库,我也从来没有在游标上做过.map,哈哈
/server/methods.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;
}
})
/client/somethingsomething.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.users.find({'roles.__global_roles__':'admin'}).fetch()
__global_roles 是默认组。将其替换为您需要的组。
http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element
如果您正在使用 meteor-tabular/TabularTables,此答案可以提供帮助:
如果要查看此类群的所有规则:
Meteor.users.find({
'roles.myrole': {$exists : true}
});
或者只有几个:
Meteor.users.find({
'roles.myrole': {$in: ['viewer', 'editor']}
});