Se qualcuno sta ancora cercando una risposta a questa domanda, ho delineato la mia soluzione di seguito.
Quando creo un nuovo utente, aggiungo un campo chiamato ruolo nel mio documento utente. Se desidero che un utente sia in grado di rimuovere altri utenti dalla raccolta Meteor.users
, gli attribuisco un ruolo di administrator
. In caso contrario, gli do un ruolo di member
. Quindi, il mio documento utente simile a questa -
{
"_id" : ...,
"createdAt" : ...,
"services" : {...},
"username" : "test",
"profile" : {
"name" : "Test Name",
"role" : "administrator"
}
}
Sul client, ho una lista di utenti (aggiunto utilizzando un nome #each
modello) con un pulsante Rimuovi accanto a ciascun utente. Un utente deve accedere per vedere questo elenco. Ho definito un gestore di eventi per il pulsante di rimozione -
'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);
}
})
}
Tuttavia, Meteor.users non consente operazioni rimuovere dal client per impostazione predefinita. Pertanto, è necessario modificare la richiamata Meteor.users.allow
nel server come mostrato di seguito per consentire agli utenti di essere rimossi dal lato client. Ma dobbiamo assicurarci che solo un utente con un ruolo di amministratore sia autorizzato a questo privilegio.
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: []
});
Questa è l'idea generale. Puoi costruire su questo per soddisfare le tue esigenze.
Non è necessario essere registrati, purché si abbia esplicitamente il diritto di eliminare un utente sul lato server: Meteor.users.Users.allow ({remove: function() {return vero;}}); Ovviamente si dovrebbe restituire true solo quando si ha fiducia in questa chiamata/l'utente ... –