2013-10-06 3 views
2

Я хочу проверить, изменились ли роли пользователя.Как проверить, изменились ли роли пользователя?

Посмотрите на этот пример: я являюсь администратором, и я хочу изменить роли другого администратора (ROLE_MEMBER_ADMIN - ROLE_USER). Но роли участника меняются, только если он отключается и снова соединяется.

Есть ли способ isEqualToEquatableInterface? Как я могу это реализовать?

ответ

0

Я думаю, вы должны реализовать его самостоятельно. Это похоже на журнал пользователя.

Вы можете создать новую таблицу, в которой будут записываться все события, связанные с идентификатором пользователя. Затем вы можете регистрировать каждое событие.

После этого вы можете написать функцию, которая проверяет, есть ли изменения для пользователя.

+0

Я установлю слушателя, чтобы проверить, изменились ли роли ... У вас есть идея? –

0

В вашем User Entity:

use Symfony\Component\Security\Core\User\EquatableInterface; 
use Symfony\Component\Security\Core\User\UserInterface; 

class User implements UserInterface, \Serializable, EquatableInterface { 

    /* took out getters/setters/ members declaration for clarity */ 

    /** 
    * @see \Serializable::serialize() 
    */ 
    public function serialize() { 
     return serialize(array(
      $this->id, 
      $this->username, 
      $this->email, 
      $this->password, 
      $this->isActive, 
      $this->roles 
     )); 
    } 

    /** 
    * @see \Serializable::unserialize() 
    */ 
    public function unserialize($serialized) { 
     list (
      $this->id, 
      $this->username, 
      $this->email, 
      $this->password, 
      $this->isActive, 
      $this->roles 
     ) = unserialize($serialized); 
    } 

    public function isEqualTo(UserInterface $user) { 
     if (!$user instanceof User) { 
      return false; 
     } 

     if ($this->password !== $user->getPassword()) { 
      return false; 
     } 

     if ($this->username !== $user->getUsername()) { 
      return false; 
     } 

     if ($this->email !== $user->getEmail()) { 
      return false; 
     } 

     if ($this->isActive !== $user->isEnabled()) { 
      return false; 
     } 

     // check roles 
     // http://www.metod.si/symfony2-reload-user-roles/ 
     if (md5(serialize($this->getRoles())) !== md5(serialize($user->getRoles()))) { 
      return false; 
     } 

     return true; 
    } 
} 

Он должен это сделать, протестирована с PHP 5.3.27, PHP 5.4.X имеет некоторые проблемы с сериализации.

Надеюсь, это поможет.

Смежные вопросы