Безопасный метод с использованием аннотаций

У меня есть страница с формой, и я хочу знать, возможно ли получить к ней доступ с помощью 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));
}

Это защитит всю функцию, но я хочу получить к ней доступ, только не POST к ней без входа в систему. Альтернативой может быть проверка того, есть ли вошедший в систему пользователь в скобках $ form-> isValid (). Но мне все еще интересно, можно ли это сделать с помощью аннотаций.

3

Решение

Вы могли бы сделать что-то вроде этого.

Вы можете разрешить оба типа методов анонимно и проверять только внутри контроллера, чтобы увидеть, аутентифицирован ли пользователь и выполняет ли он POST.

(Вы не указываете, какую версию 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));
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]