Ich habe das Benutzermodell mit einigen Rechten erweitert, so dass ich Rechte für den Benutzer an verschiedenen Orten haben kann, um einige Aktionen auszuführen.Symfony Angemeldet Benutzer hat nicht alle Eigenschaften
Im UserRepository ich das ganze Zeug bekomme ich brauche, und ich bin zu speichern alles in dem Benutzerobjekt: richtig
if($user instanceof UserInterface){
// get the roles
$userRoles = $this->getEntityManager()->getRepository('BackofficeBundle:UserRoles')->findBy(
array('userId' => $user->getId())
);
if(!empty($userRoles)){
foreach ($userRoles as $userRole){
$user->setRoles($userRole->getRole());
}
}
// get the rights
$userRights = $this->getEntityManager()->getRepository('BackofficeBundle:UserRights')->findBy(
array('userId' => $user->getId())
);
if(!empty($userRights)){
foreach ($userRights as $userRight){
$user->setRight($userRight->getActionRight());
}
}
}
Alles ist in Ordnung und die Benutzerrechte sind setted. Aber wenn ich an die/Homepage Route umgeleitet werde und erhalten die Benutzer in der default mit:
$user = $this->getUser();
Das $ Benutzerobjekt haben nicht mehr die Rechte. Was ist hier falsch? Kann ich keine zusätzlichen Dinge in das Benutzerobjekt legen?
- EDIT ---
ich auch die Rechte zur Serialisierung haben versucht, so kann der Benutzer-Objekt in der Sitzung gespeichert werden:
public function serialize()
{
return serialize(array(
$this->id,
$this->username,
$this->password,
$this->rights
));
}
public function unserialize($serialized)
{
list (
$this->id,
$this->username,
$this->password,
$this->rights
) = unserialize($serialized);
}
Im symfony doku, sie erklären, dass Bei jeder Ansicht bekommen sie den Benutzer jedes Mal aus der DB. Aber wie verwalten sie die Rollen? Die Rollen sind jedes Mal dort, auch wenn sie nicht in meinem Benutzerobjekt sind, da das Rollen-Nandling von einer anderen Tabelle ausgeführt wird.
Aber wenn die Benutzer-Entität in der Sitzung beibehalten wird, warum werde ich whith $ user = $ this-> getUser(); ein anderes Objekt zu vervollständigen, wie ich es im UserRepository habe, nachdem ich das Benutzerobjekt geändert und es bei der Anmeldung zurückgegeben habe? –
Ich habe versucht, die Rechte zur Serialisierung, aber es passiert nichts: public function serialize() { return serialize (array ( $ this-> id, $ this-> Benutzername, $ this-> Passwort, diese $ -> Rechte )); } public function unserialize ($ serialisierten) { Liste ( $ this-> id, $ this-> Benutzername, $ this-> Passwort, $ this-> Rechte ) = unserialize ($ serialisiert); } –
Sie holen den Benutzer nicht aus dem Repository, wenn Sie dies explizit tun. Sie sollten diese Dinge nicht im Repository tun: Im Repository sollten Sie nur auswählen, welche Entitäten abgerufen werden sollen, ohne dass Änderungen vorgenommen werden. – ste