У меня есть контроллер ajax для хранения действий, которые вызываются через AJAX
от JS
.Symfony 2 - Secure Ajax Controller
Здесь в каждом действии я проверить, если запрос сделан AJAX
и никто другие:
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
Теперь проблема в том, что не каждый Аякс действие контроллера должна быть вызваны всеми, а в зависимости от роли зарегистрированный пользователь.
Запрос к действию производится AJAX
из JS
, но поскольку действия в контроллере я все еще в состоянии получить вход в объект пользователя по $this->getUser()
и проверить, если пользователь имеет приемлемую ROLE
выполнить действие контроллера по isGranted()
.
Пример:
if (!$authorizationChecker->isGranted('ROLE_ADMIN')) {
return new JsonResponse(array('message' => 'This can be performed only by admin!'), 400);
}
Должен ли я проверить ROLES
внутри контроллера в каждом действии или попытке настроить access_control
для АЯКС маршрутов в security.yml
?
Я понятия не имею, в чем большая разница между этими двумя подходами, но хотелось бы знать, какой из них будет более практичным, и может держать мои действия ajax более безопасными.
Пока вы пишете тесты, оба они будут одинаково безопасными. Я имею в виду, что эффект будет таким же. Если вы хотите сделать свои действия менее подробными, вы можете использовать yaml, или вы можете использовать аннотации: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html – jkrnak