如何为Meteor应用程序添加2级用户身份验证

时间:2015-04-17 05:28:25

标签: javascript node.js authentication meteor meteor-accounts

对于我正在编写的Meteor应用程序,我希望有两个级别的用户身份验证。在第一级,用户将使用用户名和密码(在属于该组的许多人之间共享)登录到组。在第二级,用户将使用他们的电子邮件和密码登录到所述组内的个人帐户。

我已经开发了一个系统,用于让用户登录他们的个人帐户(使用电子邮件/密码),但我对如何添加功能以使每个用户属于特定组感到困惑。

类似的例子是类似于slack的登录系统。使用组名登录的位置,然后登录您的个人资料。如果经过身份验证(即您的凭据表明您的电子邮件/密码正确+您属于该组),则可以开始使用该应用程序。

我觉得解决方案非常简单,我尝试使用accounts-ui元素{{> loginButtons}}但它只能在第二级工作(只能将用户登录到他们的配置文件中,并且无法让用户登录不同的团体)

我认为我的问题可能是我插入所述元素的位置,或者可能是meteor不允许您使用多个用户身份验证实例。

我正在寻找对我的问题的一些澄清,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

正如有人已经建议的那样,alanning:角色是管理用户权限的最佳方式。组权限只是查看用户角色的另一种方式。

一些复制粘贴代码,适用于任何来看

的人
if Roles.userIsInRole(userId, [
    'llama'
    'admin'
  ], Roles.GLOBAL_GROUP)
  // Do something with privileges 
else
  // No privileges

仅向管理员角色的用户安全发布:

if (Roles.userIsInRole(this.userId, ['admin'], Roles.GLOBAL_GROUP)) {
    return SomeCollection.find({}); // Publish all fields
} else {
    return SomeCollection.find({}, {fields: { // Only return public fields
        'name': true 
      }
    }
}

将角色集合本身的发布限制为仅限管理员角色的用户:

Meteor.publish("roles", function() {
    if (Roles.userIsInRole(this.userId, 'admin', Roles.GLOBAL_GROUP)) {
        return Meteor.roles.find({});
    } else {
        this.ready();
    }
});

在角色中添加/删除用户:

Meteor.methods({
// add user to role. Roles can be an array
  addRoleToUser: function(userId, roles) {
    if(Roles.userIsInRole(this.userId, 'admin', Roles.GLOBAL_GROUP)) {
      Roles.addUsersToRoles(this.userId, roles, Roles.GLOBAL_GROUP);
  },

// Remove user from a role: 
  removeRoleFromUser: function(userId, roles) {
    if(Roles.userIsInRole(this.userId, 'admin', Roles.GLOBAL_GROUP)) {
      Roles.removeUsersFromRoles(userId, roles, Roles.GLOBAL_GROUP);
    }
  }
}