2016-06-28 8 views
1

Die Verwendung von socket.io zum Übertragen von Ereignissen und Daten an andere Listener ist so einfach, dass jeder die Daten sehen darf. Aber gibt es eine Strategie, die ich verwenden kann, wenn jeder Benutzer nur Daten sehen darf, die ihm gehören?Socket.io - Strategie für die Übertragung an Benutzer mit verschiedenen Berechtigungsstufen

Zum Beispiel haben wir ein System von Aufträgen. Auf dem Dashboard können einige Benutzer alle Bestellungen basierend auf ihrer Zugriffsebene sehen. Wenn also eine Bestellung von einem Benutzer aktualisiert wird, kann ich dieses Ereignis an alle anderen Benutzer senden, ohne die neuen Daten für jedes im Dashboard geöffnete Fenster abrufen zu müssen, oder?

Also ein Beispiel wäre so etwas wie socket.send('ordersUpdated', data) von der Clientseite, in der ich denke, dass der Knotenserver es fangen und die Daten an die anderen Sockets senden kann, die auf dem Ereignis ordersUpdated hören.

Aber was ist mit Fällen, in denen Benutzer nur ihre eigenen Bestellungen sehen können? Ich kann diese Daten nicht an sie senden, da jeder Benutzer dieser Ebene nur seine eigenen Daten sehen kann. Was ist, wenn eine ihrer Bestellungen von einem Benutzer geändert wird, der alle Bestellungen sehen kann? Ihr Dashboard müsste ebenfalls aktualisiert werden, aber sie können die gleichen übertragenen Daten nicht empfangen.

Gibt es eine bestimmte Art und Weise, wie ich das angehen sollte? Eine Idee, obwohl nicht eine gute, denke ich, wäre, nur ein Ereignis zu senden, das besagt, dass etwas aktualisiert wurde, was dazu führen wird, dass sie die Daten vom Server abrufen.

Um mehr Details zu liefern, verwende ich auch Angular und Laravel.

+0

'Sockets', auf einer Programmierebene, sind nicht' socket.io' verwandt ... Ich entfernte das Tag. Weitere Informationen finden Sie in den Tag-Tags [tag: sockets]. – Myst

Antwort

2

Eine Möglichkeit besteht darin, Chat-Räume zu verwenden, um Gruppen von Benutzern mit einer bestimmten Zugriffsebene zu verwalten. Sie können beispielsweise eine Reihe von Räumen nach Berechtigungsstufe benennen. Wenn sich ein Benutzer mit dem Server verbindet und authentifiziert, wer er ist, können Sie ihn in die Chat-Räume stellen, in die er gehört (je nach Berechtigungsstufe). Die höchste Berechtigungsstufe (erlaubt alle Aufträge zu sehen) könnte "all_orders" heißen.

Dann, wenn eine Änderung an einer Bestellung auftritt, senden Sie es an alle in all_orders und andere Chat-Räume, die mit der Änderung konsistent sind. Sie würden auch den Benutzer benachrichtigen, der direkt mit der Bestellung verbunden ist.

Der Vorteil der Verwendung von Chat-Rooms ist, dass Sie das integrierte socket.io-Schema verwenden, um Benutzergruppen zu überwachen und an diese zu senden. Die Verpflichtung wäre immer noch auf Ihrem Server-Code, um herauszufinden, welche Gruppe von Benutzern über eine bestimmte Bestellung benachrichtigt werden sollte, aber socket.io würde die Mechanismen verwalten, die eine Gruppe von Benutzern verwalten und an sie senden. Ein weiterer Vorteil der Verwendung von Chat-Rooms ist, wenn ein Benutzer die Verbindung trennt, entfernt Socket.io automatisch diesen Socket aus allen zugehörigen Chat-Rooms. Wenn Sie eine eigene Datenstruktur für die Gruppen verwenden, müssen Sie einen Socket bei jeder Verbindung entfernen, um Speicherlecks zu vermeiden.

+0

Toll, danke für die Rückmeldung. – kenshin9

Verwandte Themen