Meteor: Wie sollte ich die Benutzer-Sammlung aktualisieren, um ein neues Attribut in das Objekt / Wörterbuch aufzunehmen?

8

Ich habe versucht, überall nach einer Antwort zu suchen, aber ich kann nicht scheinen, dass das funktioniert. Ich benutze Meteor mit Cordova, um eine mobile App zu erstellen.

Ich möchte meiner Users-Sammlung ein Attribut hinzufügen (dasjenige, das Meteor erstellt, wenn ich eingeloggt bin). dh. Zum Beispiel möchte ich {currentHotel: "Something"} meiner db.Users-Sammlung hinzufügen.

Ich versuche dies auf die richtige Art und Weise zu tun. Die Verwendung von Meteor.methods wurde zitiert, um für Echtzeitanwendungen nicht gut zu sein. In jedem Fall möchte ich verstehen, wie Sie die Benutzersammlung mit Publish - Subscribe aktualisieren können.

%Vor%

Daher sollte das currentHotel-Feld für die Client-Seite zugänglich sein. Jetzt das Feld "currentHotel" aktualisieren:

%Vor%

In der Browser-Konsole kann ich "currentHotel" und "services" gut sehen, was bedeutet, dass Publish-Subscribe funktioniert. Trotzdem kann ich das aktuelle Hotel nicht aktualisieren. Ich bekomme einen Zugriff verweigert. Warum ist das?

Wenn die Eigenschaft "currentHotel" überhaupt nicht in der Sammlung vorhanden ist, wie kann ich sie dann mit einem ähnlichen Veröffentlichungs-Abonnement hinzufügen? Kann ich eine Eigenschaft veröffentlichen, die nicht vorhanden ist, und dem Client das Abonnieren und Hinzufügen dieser Eigenschaft erlauben?

Ich habe auf die Meteor-Dokumente verwiesen, dies , dies und dies , kann aber immer noch nicht funktionieren! : - (

Vielen Dank im Voraus!

    
Nilay Panchal 23.04.2015, 22:43
quelle

1 Antwort

7

Sie dürfen die Root-Felder des Benutzerobjekts nicht ändern:

%Vor%

Lesen Sie hier mehr: Ссылка

BEARBEITEN: Diese Antwort ist irrelevant, wie in der neuesten Dokumentation gezeigt: Ссылка

Diese Antwort ist mehr als 1 Jahr alt :) Wie sich herausstellt, erzwingt das Schreiben von benutzerspezifischen Feldern in einem 'Profil'-Feld einige ernsthafte Sicherheitseinflüsse (wie ich immer dachte), da es den Clients erlaubt Ändern Sie diese Unterfelder. Also ja, Sie können Felder im Root-Objekt setzen, aber beachten Sie, dass Felder, die nicht vom Client geändert werden sollten, unter einem Feld ohne Schreibberechtigungen sein sollten (oder sonst fällt es unter das gleiche Problem).

    
José Ricardo Ribeiro 23.04.2015, 22:52
quelle