13

我发现删除流星中的用户帐户的唯一方法(除了使用 mrt reset 清空数据库)是实际登录到该特定用户帐户,并从控制台中删除该帐户,使用:

Meteor.users.remove('the user id');  

但是就像我说的那样,我需要以该特定用户的身份登录,并且无法找到使我能够从数据库中删除任何用户的解决方案。我确定它与权限或角色有关,但我不确定如何继续/什么是最佳解决方案/如何为特定用户设置管理角色,以便我可以删除不同的用户帐户。

4

4 回答 4

23

你可以做

meteor mongo

或者

meteor mongo myapp.meteor.com对于已部署的应用程序

然后

db.users.remove({_id:<user id>});

我不推荐它,但如果你想删除任何用户而不从流星登录,你需要修改允许规则。但是删除用户是一个非常不可能的事件,因此上述可能是最好的方法。

无论如何,如果您愿意,请修改该Meteor.users.allow({remove:function() { return true });属性。请参阅http://docs.meteor.com/#allow。您可以在那里添加一些自定义逻辑,因此只有在您是管理员时才允许您这样做

于 2013-06-10T14:00:59.173 回答
10

我在 nitrous.io 上执行此操作时遇到了麻烦,因为我无法同时打开 Meteor 和 Mongo。我放:

Meteor.users.remove(' the _id of the user ');

在 isServer 部分删除用户。

于 2013-12-22T23:24:01.183 回答
3

如果有人仍在寻找这个问题的答案,我在下面概述了我的解决方案。

当我创建一个新用户时,我在我的用户文档中添加了一个名为角色的字段。如果我希望用户能够从Meteor.users集合中删除其他用户,我给他一个角色administrator. 如果没有,我给他一个角色member。所以,我的用户文档看起来像这样 -

{
  "_id" : ...,
  "createdAt" : ...,
  "services" : {...},
  "username" : "test",
  "profile" : {
    "name" : "Test Name",
    "role" : "administrator"
  }
}


在客户端,我有一个用户列表(使用#each模板标签添加),每个用户旁边都有一个删除按钮。用户必须登录才能查看此列表。我为删除按钮定义了一个事件处理程序 -

'click #remove-user-btn': function () {
  Meteor.users.remove({ _id: this._id }, function (error, result) {
    if (error) {
      console.log("Error removing user: ", error);
    } else {
      console.log("Number of users removed: " + result);
    }
  })
}


但是,默认情况下,Meteor.users 不允许从客户端进行删除操作。因此,您必须编辑Meteor.users.allow服务器中的回调,如下所示,以允许从客户端删除用户。但是我们需要确保只有具有管理员角色的用户才能获得此权限。

Meteor.users.allow({
  remove: function (userId, doc) {
    var currentUser, userRole;
    currentUser = Meteor.users.findOne({ _id: userId }, { fields: { 'profile.role': 1 } });
    userRole = currentUser.profile && currentUser.profile.role;
    if (userRole === "administrator" && userId !== doc._id) {
      console.log("Access granted. You are an administrator and you are not trying to delete your own document.");
      return true;
    } else {
      console.log("Access denied. You are not an administrator or you are trying to delete your own document.");
      return false;
    }
  },
  fetch: []
});

这是一般的想法。您可以在此基础上满足您的需求。

于 2015-11-04T18:30:41.653 回答
1

以下是通过控制台从 mongo 删除用户的步骤:
第 1 步:打开新控制台
第 2 步:将目录更改为您的应用程序,例如 (cd myapp)
第 3 步:输入命令meteor mongo
第 4 步:确保存在一个名为 users 的表,db.users.find({});
第 5 步:找到您要删除的用户的用户 ID 并键入:

db.users.remove({_id:"nRXJCC9wTx5x6wSP2"}); // id should be within quotes
于 2016-12-05T20:28:26.833 回答