最好在控制器中检查getUser()
security.context
服务的public function editAction()
{
$user = $this->container->get('security.context')->getToken()->getUser();
if (!is_object($user) || !$user instanceof \Acme\UserBundle\User) {
throw new AccessDeniedException('This user doesn't have access');
}
// work with $user
// ....
调用的对象实际上是我的自定义用户类的对象吗?
getUser()
唯一可以保证的是Symfony\Component\Security\Core\User\UserInterface
返回一个实现{{ user.biography }}
的对象,没有别的,对吗?
这意味着控制器可能会接收任何类型的对象(可能是一个匿名的标记),所以如果我将对象直接传递给({没有控制它)对象后来调用Acme\UserBundle\User
,这只在{{1}}上课..,我会犯错误吗?
答案 0 :(得分:2)
如果您的配置允许这种可能性,这是一个好主意。如果允许匿名用户或实现多个类型,则可能会发生这种情况。
在实现多种用户类型时,最好让它们共享一个公共接口。您还可以在每个类上覆盖“getRole”方法,以便每个类型返回一个额外的角色来定义它的类型,然后使用访问控制来过滤掉不需要的类型。
答案 1 :(得分:0)
最好使用这种条件。
public function editAction()
{
if (!$this->get('security.context')->isGranted('ROLE_USER')) {
return $this->redirect($this->generateUrl('frontend_cart_login'));
}
...
您可以在security.yml文件中选择自己的“ROLE”。