JS
からAJAX
を通して呼び出されるアクションを保存するためのajaxコントローラがあります。symfony 2 - 安全なAjaxコントローラ
ここでリクエストがAJAX
によって行われておらず、他のされている場合、私は検証すべてのアクションで:
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
さて問題は、すべてのAjaxのコントローラのアクションは、誰もが呼ばれるべきではないということですが、むしろの役割に応じてログインしたユーザー
アクションへの要求がJS
からAJAX
によって作られたが、アクションは、コントローラにあるので、私はまだ$this->getUser()
によってユーザーオブジェクトに記録され得ることができていますし、ユーザーがisGranted()
によってコントローラのアクションを実行するための許容ROLE
を持っているかどうかを確認することです。
例:
if (!$authorizationChecker->isGranted('ROLE_ADMIN')) {
return new JsonResponse(array('message' => 'This can be performed only by admin!'), 400);
}
私はすべてのアクションで内部のコントローラからROLES
をチェックしたりsecurity.yml
にAJAXルートのaccess_control
を設定しようとするべきでしょうか?
これらの2つのアプローチの大きな違いは何もわかりませんが、どちらがより実用的で、自分のAjaxアクションをより安全に保つことができるかを知りたいと思います。
あなたがテストを書く限り、それらの両方は同等に安全です。私の言うことは、効果は同じになるということです。 アクションをあまり冗長にしたい場合は、yamlを使用するか、アノテーションを使用します(http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html)。 – jkrnak