我正在使用meteor软件包ian:accounts-ui-bootstrap-3用于帐户,alanning:roles用于分配角色。
在注册表单上,我有两个选项,一个用于 Doctor ,另一个用于 Advisor 。我想将所选选项指定为该用户的角色。有人能告诉我怎么做吗?
我刚刚开始学习流星,对它的流程了解不多。如果我像这样手动创建用户,我可以为用户分配角色:
var adminUser = Meteor.users.findOne({roles:{$in:["admin"]}});
if(!adminUser){
adminUser = Accounts.createUser({
email: "mohsin.rafi@mail.com",
password: "admin",
profile: { name: "admin" }
});
Roles.addUsersToRoles(adminUser, [ROLES.Admin]);
}
但是我想在用户注册时自动分配一个滚动并选择其中一个选项,并且该选项应该被指定为他的角色。
答案 0 :(得分:5)
你不应该为此而烦恼。您可以使用Accounts.onCreateUser
集合上的以下挂钩来代替使用Meteor.users
。以下内容应该有效:
Meteor.users.after.insert(function (userId, doc) {
if (doc.profile.type === "doctor") {
Roles.addUsersToRoles(doc._id, [ROLES.Doctor])
} else if (doc.profile.type === "advisor") {
Roles.addUsersToRoles(doc._id, [ROLES.Advisor])
}
});
答案 1 :(得分:1)
每次可以直接在用户对象上设置角色而不是使用Roles API时,必须检查登录。
黑客?是的,您可能需要确保已将角色添加到角色中...不确定是否还有其他任何内容。
if(Meteor.isServer){
Accounts.onCreateUser(function(options, user){
if(options.roles){
_.set(user, 'roles.__global_roles__', ['coach', options.roles]);
}
return user;
});
}
注意:_.set是lodash方法,不在underscorejs中。
没有漂亮的解决方案,因为:
onCreateUser
中,用户尚未添加到收藏中。 Accounts.createUser
的回调目前仅供客户端使用。然后可以从该回调中使用一种方法,但依赖它是不安全的。 onCreateUser
它还没有。答案 2 :(得分:-1)
您可以使用Accounts.onCreateUser挂钩来管理它。
请记住下面的代码相当不安全,您可能希望事先进行更多检查,否则任何人都可以为自己分配管理员。 (来自docs):
选项可能来自不受信任的客户端,因此请确保验证从中读取的任何值。
Accounts.onCreateUser(function (options, user) {
user.profile = options.profile || {};
if (_.has(options, 'role')) {
Roles.addUserToRoles(user._id, options.role);
}
return user;
});
答案 3 :(得分:-1)
感谢您的回复。我尝试过,但它对我不起作用。
我使用Accounts.onLogin hook来管理它。下面的代码适用于我:
Accounts.onLogin(function (info) {
var user = info.user;
if(user.profile.type === "doctor"){
Roles.addUsersToRoles(user, [ROLES.Doctor])
}
else
if(user.profile.type === "advisor"){
Roles.addUsersToRoles(user, [ROLES.Advisor])
}
return user;
});