2015-10-02 21 views
0

上午使用meteor-useraccounts和alanning:我的Meteor webapp中的角色。这个想法是,用户可以注册并自动分配角色。所以我正在考虑使用Accounts.onCreateUser挂钩,但无法让它工作。Meteor-Useraccounts and Accounts.onCreateUser

Accounts.onCreateUser(function(options, user) { 
    var user = user.user; 
    var defaultRole = ['admin']; 
      if (!user.roles){ 
       Roles.addUsersToRoles(user, defaultRole); 
      } 
}); 

我收到以下错误信息:

异常而调用方法“ATCreateUserServer”类型错误:无法未定义

读取属性“角色”用户似乎是未知,因此未定义。您可以使用Meteor-useraccounts并在创建用户时分配角色。

新的编辑:尝试了一下更进一步,下面的代码工作,但我真的不主张使用这个,因为它奇怪的是每次根据用户的登录名添加的作用:

Accounts.onLogin(function(user) { 
    check(user, Object); 
     var user = user.user; 
     var defaultRole = ['admin']; 
     if (!user.roles){ 
      Roles.addUsersToRoles(user, defaultRole); 
     } 
    return user; 
}); 

回答

0

总是有很多方法可以做到这一点。在其中的是在创建后的用户,并正式获得用户ID,像这样添加的角色:

var id = Accounts.createUser(
      createOptions 
     ); 
Roles.addUsersToRoles(id, ["user","guest"]); 

如果你想使用钩子添加角色onCreateUser可以扩展用户对象,像这样:

Accounts.onCreateUser(function(options, user) 
{ 
    if(!options || !user) { 
     throw new Meteor.Error('Problem to create new user'); 
     return; 
    }  
    var user_extend = 
    { 
     username: options.username, 
     email: options.email, 
     profile: options.profile, 
     roles: ["user","guest"] 
    }; 
    _.extend(user,user_extend); 

    return user 
} 

我更喜欢第一种方法,因为您可以决定何时何地将角色指定给该用户,因为您将为在您的网站上注册的每个用户设置这些角色。我希望它有帮助。