Symfony 2 - 安全的Ajax控制器

时间:2017-02-09 15:18:33

标签: ajax symfony authorization access-control

我有一个ajax控制器来存储通过AJAX的{​​{1}}调用的操作。

在每个操作中,我都会验证请求是由JS而不是其他:

AJAX

现在的问题是并非每个人都应该调用每个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中的ajax路由配置access_control

我不知道这两种方法之间有什么重大区别,但是想知道哪种方法更实用,可以让我的ajax操作更安全。

1 个答案:

答案 0 :(得分:0)

取决于您拥有的AJAX控制器的数量。如果您有这么多控制器,那么仅允许某个角色,access_control中的security.yml是一个不错的选择。否则,您可以在每个控制器中具备该条件。

对于动态权限层,根据主题属性(查看内容)决定权限,您可能希望使用voter