【问题标题】:Symfony 2 - Secure Ajax ControllerSymfony 2 - 安全的 Ajax 控制器
【发布时间】:2017-06-27 16:23:51
【问题描述】:

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

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

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

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

操作请求是由来自JSAJAX 发出的,但由于操作在控制器中,我仍然能够通过$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 symfony authorization access-control


【解决方案1】:

取决于您拥有的AJAX 控制器的数量。如果你有这么多控制器,这些控制器只能用于某个角色,access_control in security.yml 是一个不错的选择。否则,您可以在每个控制器中都有条件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多