我对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>
但遗憾的是它无法正常工作......任何人都可以帮助我吗?
答案 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中有一个自定义用户集合发布的示例。