Как удалить учетные записи пользователей в Meteor?

Единственный способ, которым я нашел удаление учетных записей пользователей в meteor (кроме опорожнения базы данных с помощью mrt reset), - это фактически войти в эту учетную запись определенного пользователя и удалить учетную запись с консоли, используя:

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

Но, как я уже сказал, мне нужно войти в систему как этот конкретный пользователь и не смог найти решение, которое позволяет мне удалять любого пользователя из db. Я уверен, что он имеет какое-то отношение к разрешениям или ролям, но я не уверен, как действовать/что является лучшим решением/как установить административную роль для конкретного пользователя, чтобы я мог удалять разные учетные записи пользователей.

Ответ 1

Вы могли бы сделать

meteor mongo

или

meteor mongo myapp.meteor.com для развернутого приложения

Тогда

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

Я бы не рекомендовал его, но если вы хотите удалить любого пользователя, не войдя в систему от метеор, вам нужно будет изменить правила allow. Но удаление пользователя - очень маловероятное событие, поэтому вышеупомянутое может быть лучшим способом сделать это.

В любом случае, если вы этого хотите, измените свойство Meteor.users.allow({remove:function() { return true });. См. http://docs.meteor.com/#allow. Вы можете добавить туда некоторую пользовательскую логику, чтобы она позволяла вам делать это, если вы являетесь администратором

Ответ 2

У меня были проблемы с этим на nitrous.io, потому что я не мог открыть как Метеор, так и Монго. Я положил:

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

в разделе isServer, чтобы удалить пользователя.

Ответ 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: []
});

Это общая идея. Вы можете использовать это в соответствии с вашими потребностями.

Ответ 4

Вот шаги для удаления пользователя из mongo через консоль: шаг 1: открыть новую консоль Шаг 2: измените директиву на ваше приложение, например (cd myapp) Шаг 3: введите команду Метеор-монго Шаг 4: убедитесь, что существует таблица с именем users, db.users.find({}); Шаг 5: найдите идентификатор пользователя, которого вы хотите удалить, и введите db.users.remove({_ ID: "nRXJCC9wTx5x6wSP2" });//id должен находиться внутри кавычек