Symfony 2 - 安全 Ajax 控制器
Symfony 2 - Secure Ajax Controller
我有 ajax 控制器来存储通过 AJAX
从 JS
调用的操作。
在每个操作中,我都会验证请求是否由 AJAX
而不是其他人:
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
现在的问题是,并不是每个 ajax 控制器操作都应该被每个人调用,而是取决于登录用户的角色。
操作请求由 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
还是尝试为 security.yml
中的 ajax 路由配置 access_control
?
我不知道这两种方法之间的最大区别是什么,但想知道哪一种更实用并且可以让我的 ajax 操作更安全。
取决于您拥有的 AJAX
个控制器的数量。如果你有这么多的控制器,那些只允许用于特定角色,access_control
in security.yml
是一个不错的选择。否则你可以在每个控制器中都有条件。
对于动态权限层,根据主题属性(查看内容)决定权限,您可能需要使用voter。
我有 ajax 控制器来存储通过 AJAX
从 JS
调用的操作。
在每个操作中,我都会验证请求是否由 AJAX
而不是其他人:
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
现在的问题是,并不是每个 ajax 控制器操作都应该被每个人调用,而是取决于登录用户的角色。
操作请求由 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
还是尝试为 security.yml
中的 ajax 路由配置 access_control
?
我不知道这两种方法之间的最大区别是什么,但想知道哪一种更实用并且可以让我的 ajax 操作更安全。
取决于您拥有的 AJAX
个控制器的数量。如果你有这么多的控制器,那些只允许用于特定角色,access_control
in security.yml
是一个不错的选择。否则你可以在每个控制器中都有条件。
对于动态权限层,根据主题属性(查看内容)决定权限,您可能需要使用voter。