我有一个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操作更安全。
答案 0 :(得分:0)
取决于您拥有的AJAX
控制器的数量。如果您有这么多控制器,那么仅允许某个角色,access_control
中的security.yml
是一个不错的选择。否则,您可以在每个控制器中具备该条件。
对于动态权限层,根据主题属性(查看内容)决定权限,您可能希望使用voter。