【发布时间】:2017-06-27 16:23:51
【问题描述】:
我有 ajax 控制器来存储通过来自 JS 的 AJAX 调用的操作。
在每个操作中,我都会验证请求是否由 AJAX 提出,而不是其他人:
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
现在的问题是,并不是每个人都应该调用每个 ajax 控制器操作,而是取决于登录用户的角色。
操作请求是由来自JS 的AJAX 发出的,但由于操作在控制器中,我仍然能够通过$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 操作更安全。
【问题讨论】:
-
只要您编写测试,它们都将同样安全。我的意思是,效果将是相同的。如果你想让你的动作不那么冗长,你可以使用 yaml 或者你可以使用注解:symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/…
标签: ajax symfony authorization access-control