2017-02-27 1 views
1

Wir eine verschachtelte JSON Struktur in unserem Web-App haben auf dem Frontend wie Zeilen> Spalten> Elemente> Reihen> Spalten> Elemente ...Wie kann man überprüfen, ob die Änderung verschachtelte Daten in zulässig ist

Wir haben auch eine API-Aufruf, der die gesamten Daten als JSON an das Backend sendet.

Im Backend haben wir eine Reihe von Berechtigungen, wie Spaltengröße ändern, Zeilenhintergrund ändern, Element Reihenfolge ändern, usw., die für verschiedene Arten von Benutzern erlaubt oder verweigert werden.

Wir möchten im Backend identifizieren, ob die Änderung der verschachtelten Struktur zulässig ist.

Beispiel 1 [Update-Daten]:

Der Benutzer hat die Größe einer ‚Spalte‘ geändert, wobei die Größe als eine Eigenschaft in ‚Spalte‘ Objekt dargestellt wird.

oder

Beispiel 2 [Entfernen/Hinzufügen von Daten]:

Der Benutzer entfernt/hinzugefügt, um eine 'Element' von einer 'Spalte'.

Wir wissen, dass wir den gesamten Baum vollständig durchlaufen können, und verstehen, ob die Änderung zulässig war oder nicht, aber wir suchen nach einer besseren und schnelleren, ressourcensparenden Lösung für gleichzeitige Verbindungen und viele Benutzer/große Bäume.


Diese Frage scheint für verschiedene Technologien allgemein zu sein, aber ich möchte Sie wissen lassen, dass wir Laravel/Lumen/Dingo im Backend & Ember.js auf dem Frontend verwenden.

Danke fürs Lesen und :)

+0

Eine interessante Frage ist, wie Sie die Daten * speichern *. Denn wenn Sie es in einer relationalen Datenbank speichern, hat alles eine eindeutige ID. Verwende das. – Lux

Antwort

4

Eine Möglichkeit zu helfen, ist nicht die gesamte JSON an den Server zu senden, sondern stattdessen json Patch senden (http://jsonpatch.com/ sehen). Dann haben Sie auf dem Server Regeln, die die Pfade im Patch auf Berechtigungen effektiv hashen. Mit anderen Worten, da Sie nur die Änderung und nicht das gesamte JSON senden, müssen Sie das Enir analysieren

+0

Danke für die schnelle Antwort, Rouben. Aber können wir in diesem Fall 100% sicher sein, dass nach einigen Vorgängen, wenn die Daten im Backend und am Frontend immer 100% identisch und identisch sind?Wie können wir einen Fall behandeln, bei dem einer der Aufrufe während einer der Operationen vom Backend verweigert wurde? –

+0

Eine Sache, die Sie tun können, ist die Revision eines gegebenen Dokuments auf dem Server. Wenn ein Patch auf dem Client generiert wird, wird die Revision, für die er erstellt wurde, als Teil der Payload hinzugefügt. Wenn der Server einen Patch empfängt, für den er nicht synchronisiert ist, können Sie diesen Fall behandeln (in diesem Fall bitten Sie den Client, den gesamten JSON zu senden und neu zu berechnen ...). –

+0

Hallo Rouben. Wie ich verstehe, können wir einige Hash eines Dokuments im Frontend zum Zeitpunkt des Back-End-Aufrufs haben und senden Sie es mit dem Patch, Back-End wird den Patch ausführen berechnen den Hash und prüfen, ob diese Hashes gleich sind? – ArmeniaH

0

Sie können eine API für die Rückgabe von Berechtigungen haben (Modell Permission).

Dann überprüfen Sie diese Berechtigung für alle Aktionen, die Sie im Frontend benötigen, indem Sie ember-can verwenden.

Damit können Sie sicherstellen, dass, wenn Sie Daten von vorne für die Aktualisierung senden Rücken an Rücken, es die Berechtigungen in Backend und keine Notwendigkeit für viele zurück definiert einhält n her

+0

Aber Benutzer können diese Berechtigungen ändern, wenn sie bereits in der Frontend-Seite richtig sind? Dies ist möglicherweise nicht sicher, sodass die Berechtigungen im Backend-Teil noch überprüft werden müssen. Irgendwelche Gedanken? – ArmeniaH

+0

@ArmeniaH Ja absolut sollten Sie es auch im Backend überprüfen –

0

Ich glaube, Sie Art haben kann jede Änderung. Zum Beispiel ist der Spaltenwechsel ----> colChange (oder simpleChange). Senden Sie die Art der Änderung mit json. Die Berechtigung kann nach Änderungstyp geprüft werden. Es kann auch Gruppen von Änderungstypen geben und Berechtigungen können Gruppen zugewiesen werden. Für den Fall, dass Sie keine Daten für jede Änderung senden, muss es einen Stapel von Benutzeränderungen geben (bei jeder Benutzeränderung die Art der Änderung in den Stapel schieben). Senden Sie diesen Stack mit json an das Backend.

+0

Vazg aber das Problem ist, dass wir nicht die Änderungsart vertrauen können, die von Frontend kam – ArmeniaH

+0

Sie können vertrauen, warum nicht? Wenn es keinen Zugriff auf diese Variable gibt, kann niemand sie ändern, warum werden Sie nicht vertrauen? Auch können Sie Informationen verschlüsselt halten, um sichere Informationen zu haben. –

+0

Benutzer kann immer ändern, was von Frontend kommt :) es ist nicht sicher Verschlüsselung wird immer noch im Frontend getan werden, so ist es auch nicht sicher – ArmeniaH

Verwandte Themen