Diciamo che non voglio che il mio cliente abbia accesso a una raccolta, ma voglio che il mio cliente sia in grado di porre alcune domande sugli oggetti all'interno di quella raccolta. Come potrei ottenere questo?Ottenere valori dal server
Ad esempio, supponiamo di voler sapere se al momento è presente un utente che ha effettuato l'accesso. Quando un utente accede per la prima volta, imposto l'ID del database dell'utente in Session
e in un cookie. Attualmente, l'applicazione dice un utente è connesso in se !Session.equals("user_id", null)
, che naturalmente è molto insicuro perché ora posso aprire Firebug e dire Session.set("user_id", "foo")
e ora sto loggato.
non voglio il cliente di avere accesso alla collezione Users a questo punto. L'unico codice client che ha accesso a questa raccolta è racchiuso in una funzione self-executing nel tentativo di proteggerlo (non sono sicuro che sia il modo giusto di fare sicurezza in Meteor, quindi sentiti libero di raccomandare qualcosa lungo quelle linee anche). Quindi preferirei chiamare un codice lato server e passargli l'id che è impostato in sessione e dirmi se è un utente valido o meno.
Ecco come mi piacerebbe vederlo di impostazione:
// client
function logged_in() {
return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}
Meteor.methods
non sembra per adattarsi al disegno di legge, in quanto Meteor.call
esegue un callback asincrono. Il modello pub/sub sembra un po 'più promettente, ma dalla documentazione, non sono abbastanza sicuro di come funzioni.
Sembra suggerire che dovrei chiamare this.set
dall'interno del gestore di pubblicazione per impostare alcuni valori sul client, ma non riesco a capire dove quei valori diventano disponibili.
O forse anche il modello pub/sub non è adatto a questo e c'è un altro modo che mi manca. Qualche consiglio è apprezzato!
Dai un'occhiata a questa risposta di uno degli sviluppatori di Meteor: http: // stackoverflow.it/questions/10115042/how-do-you-secure-the-client-side-mongodb-api/10116342 # 10116342 Mostra come disattivare le "rotelle di addestramento" predefinite che consentono al client e al server di eseguire comandi arbitrari di mongo. Quindi puoi esporre solo ciò che desideri al cliente tramite Meteor.methods e Meteor.publish. Questo sarà semplificato quando verrà rilasciato il pacchetto di autenticazione di Meteor. – rmarscher