对于我正在编写的Meteor应用程序,我希望有两个级别的用户身份验证。在第一级,用户将使用用户名和密码(在属于该组的许多人之间共享)登录到组。在第二级,用户将使用他们的电子邮件和密码登录到所述组内的个人帐户。
我已经开发了一个系统,用于让用户登录他们的个人帐户(使用电子邮件/密码),但我对如何添加功能以使每个用户属于特定组感到困惑。
类似的例子是类似于slack的登录系统。使用组名登录的位置,然后登录您的个人资料。如果经过身份验证(即您的凭据表明您的电子邮件/密码正确+您属于该组),则可以开始使用该应用程序。
我觉得解决方案非常简单,我尝试使用accounts-ui元素{{> loginButtons}}
但它只能在第二级工作(只能将用户登录到他们的配置文件中,并且无法让用户登录不同的团体)
我认为我的问题可能是我插入所述元素的位置,或者可能是meteor不允许您使用多个用户身份验证实例。
我正在寻找对我的问题的一些澄清,非常感谢任何帮助!
答案 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);
}
}
}