2017-05-07 34 views
0

我已經擴展了用戶模型的一些權利,所以我可以爲用戶在不同的地方做一些操作的權利。Symfony登錄用戶還沒有全部屬性

在我得到的所有東西UserRepository我需要,我存儲在用戶對象的一切:

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

一切都很好,和userRights正確設置好的。但是,當我重定向到/主頁的路由,並得到了用戶的defaultController:

$user = $this->getUser(); 

的$用戶對象沒有了權利。這裏有什麼問題?我不能在用戶對象中放置額外的東西嗎?

- 編輯---

我也嘗試序列的權利,所以用戶對象可以被保存在會話:

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

在symfony的數獨,他們解釋說,這在每次查看時,他們每次都從數據庫獲取用戶。但他們如何管理角色?角色每次都在那裏,即使它們不在我的用戶對象中,因爲角色nandling是由另一個表完成的。

回答

0

您應該在getRoles方法中的用戶實體中操作。用戶實體將在會話中持久化,然後從db中檢索並刷新。

在存儲庫中,您不應該編輯您的實體,而只是從數據庫中檢索它們。

編輯。 提示:您應該編輯您的模型,並將UserUserRolesUserRights之間的一些關係oneToMany添加到用戶實體內的getRolesgetRights

+0

但是當用戶實體在會話中持久化時,爲什麼我會變成whith $ user = $ this-> getUser();完成不同的對象,就像我在UserRepository中修改用戶對象並在登錄時返回它一樣? –

+0

我必須嘗試序列的權利,但沒有任何反應:公共職能序列化(){ 回報 連載(陣列( $這個 - > ID, $這個 - >用戶名, $這個 - >密碼, $此 - > rights )); } 公共職能反序列化($連載) { 列表( $這個 - > ID, $這個 - >用戶名, $這個 - >密碼, $這個 - >權利 )=反序列化($連載); } –

+0

除非您明確表示,否則不會從存儲庫中獲取用戶。您不應該在存儲庫中執行這些操作:在存儲庫中,您應該選擇要檢索的實體,而不進行任何編輯。 – ste