Symfony 2 - 安全 Ajax 控制器

Symfony 2 - Secure Ajax Controller

我有 ajax 控制器来存储通过 AJAXJS 调用的操作。

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

if (!$request->isXmlHttpRequest()) {
    return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}

现在的问题是,并不是每个 ajax 控制器操作都应该被每个人调用,而是取决于登录用户的角色。

操作请求由 AJAXJS 发出,但由于操作在控制器中,我仍然能够通过 $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