如果您查看中使用的代码Roles
包你会看到他们使用你传入的 user/userId 对用户的集合执行查询(here https://github.com/alanning/meteor-roles/blob/master/roles/roles_common.js,从第 ~623 行开始):
try {
if (Meteor.isClient) {
// On client, iterate over each user to fulfill Meteor's
// 'one update per ID' policy
_.each(users, function (user) {
Meteor.users.update({_id: user}, update)
})
} else {
// On the server we can use MongoDB's $in operator for
// better performance
Meteor.users.update(
{_id: {$in: users}},
update,
{multi: true})
}
}
Since onCreateUser
在将用户对象插入集合之前调用(docs http://docs.meteor.com/#accounts_oncreateuser: 返回的文档直接插入到Meteor.users集合中), Roles
当执行查询时找不到它。
为了解决这个问题,您必须等到用户被插入到集合中。如果你看一下Roles
包中所有的示例都表明了这一点。喜欢here https://atmospherejs.com/package/roles,(第二个例子,添加了注释),以及许多其他例子:
// insert user and retrieve the id
id = Accounts.createUser({
email: user.email,
password: "apple1",
profile: { name: user.name }
});
// now we can verify that the user was inserted and add permissions
if (user.roles.length > 0) {
Roles.addUsersToRoles(id, user.roles);
}
希望这对您的问题有所帮助。所以基本上只需插入用户,然后添加权限即可。