2017-01-30 5 views
1

Ich erstelle eine Webanwendung, bei der mehrere Gruppen ihre eigene Seite haben, aber wenn sie sie ändern möchten, muss sie ein Administrator zuvor validieren. Zum Beispiel können Sie ändern, um sein Logo zu ändern, neues Foto, ändern Sie ihre Telefonnummer, ihren Namen, ihren Standort usw. ... Grundsätzlich können sie einen Wert in der Datenbank bearbeiten, aber nur wenn der Administrator es akzeptiert. Der Administrator muss jede Änderung bestätigen, weil ... unser Kunde uns darum gebeten hat.Was ist der beste Weg zu warten, dass ein Administrator etwas validiert, bevor er es tut?

Deshalb müssen wir ein System erstellen, das "ausstehende Abfragen" Verwaltung aufgerufen werden konnte.

Am Anfang dachte ich, dass das Halten der Abfrage in der Datenbank und das Ausführen, wenn ein Administrator es validiert, eine gute Idee war, aber wenn wir diese Option wählen, können wir PDO nicht verwenden, um vorbereitete Anweisungen zu erstellen, da wir Zeichenfolge verketten müssen um eine eigene Aussage zu machen, die offensichtliche Sicherheitsprobleme hat.

Dann dachten wir, dass wir PHP-Code behalten sollten, der die richtigen Methoden (die PDO verwenden) in unserer Datenbank aufruft und die wir mit eval() ausführen, wenn der Administrator ihn validiert. Aber wieder scheint es, dass die Verwendung eval() eine sehr schlechte Idee ist. Wie sagt das Zitat von Rasmus Lerford: "Wenn Eval() die Antwort ist, fragen Sie fast sicher die falsche Frage".

Ich dachte über die Verwendung von Eval, weil ich Methoden aufrufen möchte, die PDO verwendet, um mit der Datenbank umzugehen.

Also, was ist der beste Weg, um dieses Problem zu lösen? Es scheint, dass es keinen sicheren Weg gibt, es zu implementieren.

+0

Ihre Leute, denen Sie nicht vertrauen, bearbeiten PHP auf einer Website? – nogad

+0

@nogad, sie werden PHP nicht genau bearbeiten, wir rufen nur Methode mit der Zeichenfolge, die sie in einem Formular ausgefüllt haben. Aber da der PHP-Code nicht direkt ausgeführt wird, müssen wir ihn irgendwie irgendwo speichern. Ist meine Frage obskur? – Gregory

+0

ja ist es. Was ist die "Zeichenfolge", die sie in einem Formular ausgefüllt haben? – nogad

Antwort

1

Hier ist ein möglicher Ansatz, mit dem Versuch, die Dinge in einem solchen Ausmaß organisiert zu halten, da das System maßstabs beginnt:

  • eine Tabelle PendingRequests genannt erstellen. Dies wird die meisten der folgenden Felder haben und vielleicht schon einige mehr:

    (id, request_type, request_contents, reqeust_made_by, request_made_timestamp, 
        request_approved_by, request_approved_timestamp, ....) 
    


  • Request_contents ist ein weit gefasster Begriff, und es kann nicht nur allein auf eine Spalte beschränkt werden. Wie Sie die Daten für diese Spalte erfassen, hängt von der Front-End-Umgebung ab, die Sie den Benutzern zur Verfügung stellen (WYSIWYG usw.).

  • Request_approved_byNULL wird, wenn die Daten zuerst in die Tabelle eingefügt wird (das heißt Benutzer eine anfängliche Anforderung gemacht hat). Auf diese Weise wissen Sie, welche Anforderungen im Administrationsbereich angezeigt werden sollen. Sobald ein Administrator diese genehmigt hat, wird diese Spalte aktualisiert, um die id des Administrators wiederzugeben, der sie genehmigt hat, und die genehmigten Änderungen könnten schließlich live gehen.

  • Bisher haben wir nur über die Verwaltung der Anfragen gesprochen.Sobald dieser Prozess eingerichtet ist, lautet die nächste Frage, wie die genehmigten Anforderungen schließlich auf users abgebildet werden. Als solches würde es tatsächlich ein bisschen Untersuchung des gegenwärtig vorgeschlagenen Systems und seines Arbeitsablaufs erfordern. Obwohl, kurz gesagt, kann es zwei Schule der Gedanken sein:

    • Methode 1:
      eine neue Tabelle für alles, was jeder erstellen (Logo, Telefonnummer, Namen, usw.), die anpassbar ist.
      Oder
    • Methode 2:
      einfach fügen Sie sie als Spalt in einem Ihre Tabellen (die im Wesentlichen in einer 1 wäre: 1-Beziehung mit der user Tabelle, soweit Attribute wie Logo, Name, etc . sind besorgt).

  • Dies bringt uns zu Request_type. Dies ist das Feld, das Werte/Flags für das System enthält, um zu bestimmen, welches Feld oder welche Tabelle (abhängig von Methode 1 oder Methode 2) die Änderungen betrifft - nachdem ein Administrator die Änderungen genehmigt hat.

  • Egal, welche Anforderung oder welcher Ansatz es ist, über die Datenbankverwaltung zu gehen, PHP und PDO sind beide flexibel genug, um anpassbare und sichere Abfragen zu schreiben.

  • Als Nebenwirkung, könnte es eine gute Idee, einen Tisch für Geschichte aller Änderungen/Aktualisierungen vorgenommen zu halten. Nun sollte es wahrscheinlich offensichtlich sein, dass die Anzahl der Verlaufstabellen wiederum von Methode 1 oder Methode 2 abhängen wird.

Hoffe, dass hilft.

6

Ihre beiden Ideen sind, um ehrlich zu sein, einfach komisch.

Fügen Sie ein Feld in einer Tabelle hinzu, um einen genehmigten Inhalt von einem nicht genehmigten zu unterscheiden.

+0

Das könnte eine Lösung sein, aber das macht uns wirklich alle unsere bereits geschriebene PHP zu ändern. Danke für die Antwort. – Gregory

+0

Das lässt Sie all das unnötige PHP fallen lassen und ein einzelnes Feld hinzufügen. Löschen Sie eine Tonne Code und ersetzen Sie sie durch 1 Feld. Diese Option sollte wirklich gut zu dir klingen. –

Verwandte Themen