2013-10-06 4 views
2

사용자의 역할이 변경되었는지 확인하고 싶습니다.사용자 역할이 변경되었는지 확인하는 방법은 무엇입니까?

다음보기를보십시오. 저는 관리자이며 다른 관리자 (ROLE_MEMBER_ADMIN에서 ROLE_USER)의 역할을 변경하려고합니다. 그러나 멤버의 역할은 그가 연결을 끊었다가 다시 연결될 때만 바뀝니다.

isEqualTo 방법이 해결책입니까? 어떻게 구현할 수 있습니까?

답변

0

독자적으로 구현해야한다고 생각합니다. 이것은 사용자 로그와 비슷하게 들립니다.

사용자 ID와 관련된 모든 이벤트를 기록하는 새 테이블을 작성할 수 있습니다. 그런 다음 모든 이벤트를 기록 할 수 있습니다.

그런 다음 사용자에게 변경 사항이 있는지 확인하는 기능을 작성할 수 있습니다. 귀하의 사용자 엔티티에서

+0

역할이 변경되었는지 확인하기 위해 수신기를 설정합니다. 생각해 보시겠습니까? –

0

:

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는 직렬화 몇 가지 문제가 있습니다.

희망이 도움이됩니다.

관련 문제