gpt4 book ai didi

php - 使用注释的安全方法

转载 作者:搜寻专家 更新时间:2023-10-31 21:04:31 24 4
gpt4 key购买 nike

我有一个带有表单的页面,想知道是否可以使用 GET 访问它,但只允许登录用户向它发送 POST。

我知道这可以在 security.yml 中完成,但我不确定如何使用注释来完成。

 /**
* @param Request $request
* @return Response
* @Security("has_role('ROLE_USER')")
* @Method(methods={"POST"})
*/
public function calculatorAction(Request $request)
{

$form=$this->createForm(new CallRequestType(),$callReq=new CallRequest());


$form->handleRequest($request);

if($form->isValid()){
//blabla
}


return $this->render('MyBundle:Pages:calculator.html.twig', array('form' => $form));
}

这将保护整个功能,但我想访问它,而不是在未登录的情况下发布到它。另一种方法是检查 $form->isValid() 括号中是否有登录用户.但我仍然想知道是否可以通过注释来完成。

最佳答案

你可以这样做。

您可以匿名允许这两种方法类型,并仅在 Controller 内部检查以查看用户是否已通过身份验证并正在发布。

(您没有说明您使用的是哪个版本的 symfony,因此您可能必须用 authorization_checker (2.8) 替换旧的 security.context服务)

/**
* @param Request $request
* @return Response
*
* @Route("/someroute", name="something")
* @Method(methods={"POST", "GET"})
*/
public function calculatorAction(Request $request)
{

if ( !$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY') && $request->getMethod() == 'POST') {
throw new AccessDeniedHttpException();
}


$form=$this->createForm(new CallRequestType(),$callReq=new CallRequest());


$form->handleRequest($request);

// you also need to check submitted or youll fire the validation on every run through.
if($form->isSubmitted() && $form->isValid()){
//blabla
}


return $this->render('MyBundle:Pages:calculator.html.twig', array('form' => $form));
}

关于php - 使用注释的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com