2015-04-17 134 views
0

对于我正在编写的Meteor应用程序,我希望具有两个级别的用户身份验证。在第一级,用户将使用用户名和密码登录到一个组(这是许多属于该组的人共享的)。在第二级,用户将使用他们的电子邮件和密码登录到他们自己的个人账户。如何将2级用户身份验证添加到Meteor应用程序

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

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

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

我想我的问题可能是我插入上述元素,或者它可能是流星不允许您使用多个用户身份验证实例。

我在寻找一些关于我的问题的解释,任何帮助将不胜感激!

+0

这很不寻常,为什么不直接使用权限/角色呢? https://atmospherejs.com/alanning/roles –

+0

谢谢,这看起来很有趣,我一定会更多地关注它。但是,让用户登录两次并不是那么容易?他们再次登录(并验证)到一个特定的组(也可以创建一个新组)。在该帐户中,他们可以用他们的凭证登录/注册。这有点奇怪,但至少在理论上实现起来似乎很简单。我只需要帮助弄清楚如何... –

+0

但是,为什么不只是有'组'作为角色,那么你只有一个登录,并且用户有一个他们可以交互的'组'的列表。只需检查用户是否登录,然后检查他们是否属于该“组”的一部分。简单。 –

回答

0

就像已经推荐过的人一样,角色是管理用户权限的最佳方式。组权限只是查看用户角色的另一种方式。

的人有些复制粘贴代码谁上台希望通过

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); 
    } 
    } 
} 
相关问题