2017-05-07 3 views
0

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.

Antwort

0

Sie sollten in der getRoles-Methode in der Entität user arbeiten. Die Benutzereinheit wird in der Sitzung beibehalten und dann von db abgerufen und aktualisiert.

Im Repository sollten Sie Ihre Entitäten nicht bearbeiten, sondern nur aus db abrufen.

BEARBEITEN. Ein Hinweis: Sie sollten Ihr Modell bearbeiten und fügen Sie einige Beziehungen oneToMany von User zu und UserRights und arbeiten dann auf getRoles und getRights innerhalb der Benutzereinheit.

+0

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? –

+0

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); } –

+0

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

Verwandte Themen