2013-06-10 16 views
11

L'unico modo che ho trovato per eliminare gli account utente in meteora (diversi svuotare il database con reset MRT), è di fatto accedendo all'account utente specifico, e la cancellazione dell'account dalla console, utilizzando:Come si eliminano gli account utente in Meteor?

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

Ma come ho detto, ho bisogno di essere loggato come utente specifico, e non sono stato in grado di trovare una soluzione che mi consenta di cancellare qualsiasi utente dal db. Sono sicuro che abbia qualcosa a che fare con permessi o ruoli, ma non sono sicuro di come procedere/qual è la soluzione migliore/come impostare un ruolo amministrativo per un particolare utente, in modo da poter cancellare diversi account utente.

+0

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 ... –

risposta

20

Si potrebbe fare

meteor mongo

o

meteor mongo myapp.meteor.com per un'applicazione distribuita

Poi

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

non avrei recommen d ma se si desidera eliminare qualsiasi utente senza essere connesso da meteor, è necessario modificare le regole di autorizzazione. Ma eliminare un utente è un evento molto improbabile, quindi quanto sopra potrebbe essere il modo migliore per farlo.

Ad ogni modo, se lo si desidera, modificare la proprietà Meteor.users.allow({remove:function() { return true });. Vedi http://docs.meteor.com/#allow. Potresti aggiungere qualche logica personalizzata in questo modo, ma ti consentirà di farlo solo se sei l'amministratore

+0

Grazie. Mi chiedo perché non lo spieghino sul loro sito. –

+0

@EricLeroy Penso che si aspettino che tu sappia un po 'di mongodb, proprio come sapere che javascript e manubri sono un dato di fatto. – booyaa

+1

@booyaa, sì, l'ho capito, ma quando ho tirato su mongo, non includeva il mio database mongo per meteor. La chiave era usare meteor mongo –

8

Avevo difficoltà a farlo su nitrous.io perché non riuscivo ad aprire sia Meteor che Mongo. Ho inserito:

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

nella sezione isServer per rimuovere l'utente.

3

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.

+1

Non inserire informazioni importanti come quelle nell'oggetto 'user.profile' a meno che tu * veramente * sappia cosa stai facendo! Quell'oggetto è modificabile dal client anche dopo la rimozione di 'insecure' (!) È preferibile inserire il campo' role' nel documento dell'utente root o in qualche altro campo personalizzato. https://dweldon.silvrback.com/common-mistakes#profile-editing – Sphinxxx

0

Ecco i passaggi per eliminare utente dal mongo tramite console: passo 1: apre nuova console fase 2: il cambiamento diretory per la vostra applicazione, come (cd myapp) Fase 3: immettere il comando meteora mongo passo 4: assicurati che esista una tabella chiamata users, db.users.find ({}); passaggio 5: trovare l'ID utente dell'utente che si desidera eliminare e digitare db.users.remove ({_ id: "nRXJCC9wTx5x6wSP2"}); // id deve essere compreso tra virgolette

Problemi correlati