Ich baue Symfony Application, die Konsolenbefehle verwenden. Derselbe Konsolenbefehl kann aus Controller-Thru-Ereignissen ausgeführt werden, aber er kann auch vom Terminal aus ausgeführt werden. Wie kann ich herausfinden, wo der Befehl ausgeführt wurde, damit ich die Benutzerauthentifizierung implementieren kann, wenn der Befehl vom Terminal aus ausgeführt wurde? Wenn der Befehl vom Controller ausgeführt wurde, hat der Benutzer bereits die Berechtigung zum Ausführen. Aber wenn es vom Terminal aus ausgeführt wurde, muss er sich mit Benutzernamen und Passwort authentifizieren, damit ich überprüfe, ob er die notwendige Rolle hat?Symfony - wie kann man wissen, ob der Konsolenbefehl vom Controller ausgeführt wurde oder vom Terminal ausgeführt wurde?
Antwort
Die Symfony Konsolenanwendung hat keine Firewall-Ebene wie der HttpKernel.
Die Konsolenkomponente wurde für kleine "Admin-ähnliche" Aufgaben erstellt, nicht für einzelne Benutzer.
Das ganze Problem könnte durch die Implementierung eines Befehlsbusmusters gelöst werden.
Der "Befehl" wird vom Web-Controller erstellt, der gesichert ist und einen Benutzer und im CLI-Befehl (für Crontab) ohne Sicherheitsüberprüfungen hat.
Anschließend wird es an den Befehlsbus übergeben, der an den Befehlshandler übergeben wird.
Der Handler enthält die aktuelle Logik der execute-Methode. Das Befehlsobjekt würde alle Daten enthalten, um diese Logik auszuführen == Ihre aktuellen Eingabeargumente und Optionen.
Der Symfony-Befehl ist danach sehr schlank, als würden Sie nur Eingabeargumente an den Befehls-Handler übergeben. Wie es sein sollte.
Wenn es sich um eine lange laufende Aufgabe handelt, könnte sie sogar von der Web-Anfrage in eine Worker-Warteschlange ausgelagert werden.
Bitte beachten Sie die Namenskollision. Ein symfony Konsolenbefehl! == Befehl bus command hier.
Zum Beispiel könnten Sie SIMPLEBUS innerhalb Symfony verwenden: https://github.com/SimpleBus
Auch die letzten Blog-Post auf der Namensgebung Ausgabe von @skoop: http://leftontheweb.com/blog/2016/06/18/Command-or-Controller/
Sie können überprüfen, ob Ihr Befehl von der Konsole ausgeführt wurde oder von einem Controller mit php_sapi_name() function or PHP_SAPI constant (die php_sapi_name ähnlich ist())
if ('cli' === PHP_SAPI) {
// command was run from the console
} else {
// command was run from a controller
}
- 1. Wie kann ich wissen, ob dieser Code korrekt ausgeführt wurde?
- 2. Kann eine Win32-Konsolenanwendung feststellen, ob sie vom Explorer ausgeführt wurde oder nicht?
- 3. Prüfen, ob der Druck erfolgreich ausgeführt wurde
- 4. Wie kann man feststellen, ob eine Aufgabe synchron ausgeführt wurde?
- 5. wie überprüft werden kann, ob der Befehl ssh durch den Befehl pexpect spawn ausgeführt wurde, wurde erfolgreich ausgeführt oder nicht.
- 6. Wie kann man wissen, ob ein MapReduce-Job neu gestartet wurde oder neu gestartet wurde?
- 7. MySQL Wie überprüft man, ob die Abfrage erfolgreich ausgeführt wurde?
- 8. Wie überprüfe/bestätige ich, ob GPS vom Benutzer eingeschaltet wurde?
- 9. Wie Sie wissen, welche Aktivität zuletzt ausgeführt wurde
- 10. Wie überprüft man, ob die XSLT-Anweisung ausgeführt wurde
- 11. Überprüfen Sie, ob ein MotionEvent.ACTION_MOVE ausgeführt wurde
- 12. Code wird erst ausgeführt, nachdem die asynchrone Funktion ausgeführt wurde
- 13. Wie kann ich feststellen, ob ein Programm von der Befehlszeile oder vom Web ausgeführt wird?
- 14. Wie oft wurde das Programm ausgeführt? C#
- 15. Wie kann man wissen, ob ein PHAsset modifiziert wurde?
- 16. Wie kann man wissen, ob eine XML-Eigenschaft definiert wurde?
- 17. Wie überprüft man, ob eine YII-App von einer Konsole oder vom Browser ausgeführt wird?
- 18. Wie wird der jQuery-Code abhängig vom Wert ausgeführt, der über die Querystring-Funktion empfangen wurde?
- 19. kann das AndroidViewClient-Skript auf dem Gerät oder von der App (nicht vom Terminal) ausgeführt werden
- 20. Git: Wie kann man wissen, ob ein Commit ausgewählt wurde?
- 21. QtQuick, wie kann man wissen, ob eine Anwendung im Debug- oder Release-Modus kompiliert wurde?
- 22. NHibernate: Sammlung wurde geändert; Enumeration Operation kann nicht ausgeführt werden
- 23. Wie man Konsolenbefehl vom Paket in Laravel 5 registriert?
- 24. Count Anzahl der Zeiten Programm wurde ausgeführt
- 25. Wie überprüft man, ob eine Android-Anwendung installiert wurde, auch wenn sie vom Gerät entfernt wurde?
- 26. Wie kann man feststellen, wenn der Controller vom Hintergrund aus wieder aufgenommen wurde?
- 27. Wie kann ich wissen, dass die exe von der Anwendung ausgeführt wurde
- 28. Erkennen, wie eine Batch-Datei ausgeführt wurde
- 29. Wie kann man wissen, ob alle Abfragen erfolgreich in der Schleife ausgeführt wurden?
- 30. Kann in .NET ein Finalizer ausgeführt werden, selbst wenn der Konstruktor eines Objekts nie ausgeführt wurde?
Sollten Sie gerade nicht, wenn Benutzer angemeldet ist? –
Konsolenbefehle sollen nicht aus dem Internet ausgeführt werden. Übrigens, wenn jemand Zugriff auf das Terminal hat, ist eine Berechtigungsprüfung wahrscheinlich nutzlos, da er Zugriff auf alle Dateien hat. – tkausl
Ich führe einen Befehl von pheanstalk aus, um Daten in infuxDB zu aktualisieren. Aber ich möchte eine Option hinzufügen, um Befehl für Terminal auszuführen, wenn das Update nicht korrekt ausgeführt wird oder wenn etwas schief läuft. Aber er muss sich authentifizieren und ich muss nach einer Rolle suchen. Es gibt zusätzliche Sicherheit auf dem Server, um den Zugriff durch IP zu beschränken, so dass es kein Problem damit gibt. Aber es gibt viele Mitarbeiter mit Zugriff von internen IP, so dass ich nicht möchte, dass der Befehl von jemandem ausgeführt wird, der nicht sicher ist, was er tut. – sanof