2013-06-11 2 views
2

Когда я переключаюсь как администратор на пользователя site.loc/[email protected] Я не получаю роль ROLE_PREVIOUS_ADMIN. Я не уверен, какой код я должен показать вам ..Пользовательский переключатель Symfony2 отсутствует ROLE_PREVIOUS_ADMIN после переключения

Symfony Версия: 2.2.2 Symfony2

User.php

/** 
* @see \Serializable::serialize() 
*/ 
public function serialize() 
{ 
    return serialize(array(
     $this->email 
    )); 
} 

/** 
* @see \Serializable::unserialize() 
*/ 
public function unserialize($serialized) 
{ 
    list (
     $this->email 
    ) = unserialize($serialized); 
} 

public function isAccountNonExpired() 
{ 
    return true; 
} 

public function isAccountNonLocked() 
{ 
    return true; 
} 

public function isCredentialsNonExpired() 
{ 
    return true; 
} 

public function isEnabled() 
{ 
    return $this->isActive; 
} 

/** 
* @inheritDoc 
*/ 
public function eraseCredentials() 
{ 
} 

public function isEqualTo(UserInterface $user) 
{ 
    return 
     md5($user->getUsername()) == md5($this->getUsername()) && 
     md5(serialize($user->getGroups())) == md5(serialize($this->getGroups())); 
} 
+0

Правильно ли вы выполняете другие роли при переключении? Вы используете пользовательский прослушиватель безопасности? – JonnyS

+0

Другие роли правильно, у меня нет прослушивателей безопасности. У меня есть 'AuthenticationHandler' на' success', который устанавливает время входа пользователя. –

+0

Единственное, что я вижу, это другое, это ваша функция сериализации и несериализации. Мой класс сериализует $ id, а не $ email. – JonnyS

ответ

2

Вы должны осуществлять EquatableInterface для User класса:

class User implements UserInterface, EquatableInterface, \Serializable { 

    // ... 

    public function isEqualTo(UserInterface $user) { 
     return $this->username === $user->getUsername(); 
    } 

    public function serialize() { 
     return serialize(array(
      $this->id, 
      $this->username, 
     )); 
    } 

    public function unserialize($serialized) { 
     list($this->id, $this->username) = unserialize($serialized); 
    } 

    // ... 
} 
Смежные вопросы