刷新symfony2中的security.context

时间:2014-02-22 12:26:35

标签: php symfony fosuserbundle

我有以下应用流程:

添加角色操作:

 public function addroleAction($role) {
            $securityContext = $this->get('security.context');
            $em = $this->getDoctrine()->getManager();
            $user = $this->get('security.context')->getToken()->getUser();
            $userId = $user->getId();
            $userObj = $em->getRepository('ProjectEntityBundle:User')->find($userId);

            switch ($role) {
                case 6://student
                    $userObj->addRole('ROLE_STUDENT');
                    $em->flush();
                    $securityContext->getToken()->setUser($userObj);
                    break;
            }
            return $this->redirect($this->generateUrl('check_role'));
        }

检查角色操作:

public function checkroleAction() {

        $securityContext = $this->get('security.context');
        if ($securityContext->isGranted('ROLE_STUDENT')) {
            return $this->redirect($this->generateUrl('student_profile'));
        } else {
            return $this->render('ProjectEduBundle:User:selectrole.html.twig');
        }
    }

第一个操作将角色添加到数据库,并重定向到checkroleAction。 未满足if条件(返回false)。 我想这是因为在完成添加角色的数据库操作后不会刷新安全上下文。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以再次在令牌上设置用户...

$this->get('security.context')->getToken()->setUser($userObject);

addroleAction()

的末尾添加