Ich benutze meine eigene User-Klasse als und Entity-Provider für das Sicherheitssystem in Symfony 2.0.
Ich habe bemerkt, dass Symfony bei jedem Reload der Seite den Benutzer aus db holt:
SELECT t0.id AS id1, t0.username AS benutzername2, t0.salz AS salt3, t0.password AS passwort4, t0.email AS email5, t0.is_active AS is_active6, t0.credentials AS credentials7 FROM w9_users t0 WHERE t0.id =? Parameter: ['23'] Zeit: 4,43 ms
Gibt es eine einfache Möglichkeit, dieses Verhalten zu deaktivieren? Vielleicht Benutzerdaten in Sitzungsvariablen serialisieren oder sie irgendwie zwischenspeichern?
Sie können dieses Verhalten in der Methode refreshUser
Ihrer UserProvider
ändern.
Sie sollten vorsichtig sein, wenn Sie dies mit der Doktrin tun: Es gibt ein Problem bei FosUserBundle github , das die Fallstricke erklärt :
Das Speichern in der Sitzung würde zu verschiedenen Problemen führen, weshalb dies nicht standardmäßig geschieht:
Wenn ein Administrator die Berechtigungen eines Benutzers ändert, wirken sich die Änderungen nur beim nächsten Abruf des Benutzers aus der Datenbank aus. Daher muss der Benutzer sorgfältig zwischengespeichert werden, um Sicherheitsprobleme zu vermeiden.
Wenn Sie den Benutzer, der in der Sitzung serialisiert wurde, einfach wiederverwenden, wird er nicht mehr von Doctrine verwaltet. Das bedeutet, sobald Sie den Benutzer ändern oder den Benutzer in einer Beziehung verwenden möchten, müssen Sie ihn wieder in UnitOfWork zusammenführen (wodurch ein anderes Objekt als das von der Firewall verwendete zurückgegeben wird). Beim Zusammenführen wird auch eine DB-Abfrage ausgelöst. Und wenn man eine solche Logik benötigt, wird ein Teil des eingebauten Controllers, der das Benutzerobjekt für Updates verwenden möchte, durchbrochen.
Tags und Links optimization security symfony