When are user roles refreshed and how to force it?

后端 未结 8 1047
梦谈多话
梦谈多话 2020-12-14 02:57

First off, I\'m not using FOSUserBundle and I can\'t because I\'m porting a legacy system which has its own Model layer (no Doctrine/Mongo/whatsoever here) and other very cu

8条回答
  •  猫巷女王i
    2020-12-14 03:29

    Solution is to hang a subscriber on a Doctrine postUpdate event. If updated entity is User, same user as logged, then I do authenticate using AuthenticationManager service. You have to inject service container (or related services) to subscriber, of course. I prefer to inject whole container to prevent a circular references issue.

    public function postUpdate(LifecycleEventArgs $ev) {
        $entity = $ev->getEntity();
    
        if ($entity instanceof User) {
            $sc = $this->container->get('security.context');
            $user = $sc->getToken()->getUser();
    
            if ($user === $entity) {
                $token = $this->container->get('security.authentication.manager')->authenticate($sc->getToken());
    
                if ($token instanceof TokenInterface) {
                    $sc->setToken($token);
                }
            }
        }
    }
    

提交回复
热议问题