Как удалить учетные записи пользователей в 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 должен находиться внутри кавычек