我有以下应用流程:
添加角色操作:
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)。
我想这是因为在完成添加角色的数据库操作后不会刷新安全上下文。
我该如何解决这个问题?
答案 0 :(得分:0)
您可以再次在令牌上设置用户...
$this->get('security.context')->getToken()->setUser($userObject);
在addroleAction()