ユーザーの役割が変更されたかどうかを確認したい。
この例を見てください: 私は管理者であり、別の管理者の役割を (ROLE_MEMBER_ADMIN
にROLE_USER
) 変更したいと考えています。ただし、メンバーの役割は、切断して再接続した場合にのみ変更されます。
のisEqualTo
方法EquatableInterface
は解決策ですか?どうすれば実装できますか?
ユーザーの役割が変更されたかどうかを確認したい。
この例を見てください: 私は管理者であり、別の管理者の役割を (ROLE_MEMBER_ADMIN
にROLE_USER
) 変更したいと考えています。ただし、メンバーの役割は、切断して再接続した場合にのみ変更されます。
のisEqualTo
方法EquatableInterface
は解決策ですか?どうすれば実装できますか?
ユーザーエンティティで:
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 にはシリアル化に関するいくつかの問題があります。
お役に立てれば。