gpt4 book ai didi

javascript - 无法使用 'roles' 包向 meteor 用户添加 Angular 色

转载 作者:可可西里 更新时间:2023-11-01 01:36:42 24 4
gpt4 key购买 nike

我正在尝试使用 Atmosphere 上可用的“Angular 色”包,但我无法让它与 Accounts.onCreateUser() 一起使用,我可以在 github 上获取示例。当我注册一个用户时,我想给他们添加一个 Angular 色,当我测试 Angular 色是否被分配时,它没有拿起它。

这是我的代码

/server/users.js

Accounts.onCreateUser(function(options, user){
var role = ['admin'];
Roles.addUsersToRoles(user, role);
return user;
});

/client/page.js

Template.hello.events({
'click input': function () {
var loggedInUser = Meteor.user();
if (Roles.userIsInRole(loggedInUser, ['admin'])) {
console.log("Hi Admin!");
}else{
console.log("Please Log In");
}
}
});

最佳答案

如果您查看 Roles 包中使用的代码,您会发现它们使用您传入的 user/userId 对用户集合执行查询(here,从第~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})
}
}

由于 onCreateUser 在用户对象被插入到集合中之前被调用(docs : 返回的文档被直接插入到 Meteor.users 集合中),Roles 在执行查询时找不到它。

为了解决这个问题,您必须等到用户被插入到集合中。如果您查看 Roles 包,他们的所有示例都会显示这一点。喜欢here , (第二个例子,添加了注释),以及许多其他的:

// 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);
}

希望对您的问题有所启发。所以基本上只需插入用户,然后添加权限即可。

关于javascript - 无法使用 'roles' 包向 meteor 用户添加 Angular 色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com