【问题标题】:How to add 2 level user authentication to Meteor application如何向 Meteor 应用程序添加 2 级用户身份验证
【发布时间】:2015-06-23 19:48:05
【问题描述】:

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

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

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

我觉得解决方案似乎很简单,我尝试使用accounts-ui元素{{> loginButtons}}但它只在第二级有效(只能将用户登录到他们的个人资料,并且不能让用户登录到不同的组)

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

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

【问题讨论】:

  • 这很不寻常,你为什么不直接使用权限/角色呢? atmospherejs.com/alanning/roles
  • 谢谢,这看起来很有趣,我一定会更深入地研究它。但是让用户登录两次不是更容易吗?再次,他们首先登录(并通过身份验证)到特定组,即帐户(或者他们可以创建一个新帐户)。在该帐户中,他们可以使用其凭据登录/注册。这有点奇怪,但实现起来似乎很简单,至少在理论上是这样。我只需要帮助弄清楚如何......
  • 但是为什么不只是将“组”作为角色,那么您只需一次登录,用户就有一个可以与之交互的“组”列表。只需检查用户是否登录,然后检查他们是否属于该“组”。容易。
  • 但是我需要拆开我的应用程序并从头开始:(

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


【解决方案1】:

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

为路过的人提供一些复制粘贴代码

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);
    }
  }
}

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 2020-04-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多