Symfony: How do I refresh the authenticated user from the database?

前端 未结 5 1806
陌清茗
陌清茗 2020-12-03 14:26

Say for example I grant a new role to the currently authenticated user in a controller, like so:

$em = $this->getDoctrine()->getManager();
$loggedInUse         


        
5条回答
  •  一生所求
    2020-12-03 14:54

    While an answer is accepted, Symfony actually has a native way to refresh the User object. Credit goes out to Joeri Timmermans for this article.

    Steps for refreshing the User object:

    1. Make your User entity implement the interface

    Symfony\Component\Security\Core\User\EquatableInterface

    1. Implement the abstract function isEqualTo:

    public function isEqualTo(UserInterface $user)
    {
        if ($user instanceof User) {
            // 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;
    }

    The code above refreshes the User object if any new roles are added. The same principle also holds true for other fields you compare.

提交回复
热议问题