3

フォームのあるページがあり、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() ブラケットにログインしているユーザーがいるかどうかを確認することです。しかし、注釈でそれができるかどうかはまだ疑問です。

4

1 に答える 1

2

このようなことができます。

両方のメソッド タイプを匿名で許可し、コントローラー内だけをチェックして、ユーザーが認証され、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));
}
于 2016-01-20T16:31:11.600 に答える