При реализации своей админки в проекте Symfony, возникла ситуация, когда пользователь с ролью ROLE_ADMIN
убирал эту роль у себя самого. При этом он имел доступ ко всем защищенным этой ролью ресурсам до следующей "реальной" аутентификации. Иными словами, информация о ролях этого пользователя бралась из сессии и была устаревшей.
Как оказалось, поправить данную ситуацию в Symfony, очень просто. Для этого необходимо, чтобы сущность пользователя реализовывала интерфейс:
Symfony\Component\Security\Core\User\EquatableInterface;
Этот интерфейс описывает всего один метод: isEqualTo
. Реализация этого метода такая:
public function isEqualTo(UserInterface $user) { if ($user instanceof UserEntity) { // Check that the roles are the same, in any order $isEqual = count($this->getRoles()) == count($user->getRoles()); if ($isEqual) { foreach($this->getRoles() as $role) { $isEqual = $isEqual && in_array($role, $user->getRoles()); } } return $isEqual; } return false; }
Удачи!
Комментариев нет:
Отправить комментарий