Symfony 2 - access_control vs isGranted() 来控制控制器中的访问

Symfony 2 - access_control vs isGranted() to control access in controller

documentation 中有许多示例说明如何管理某些路由的访问控制。

我在 security.yml 中有我的 access_control 块,其中我描述了哪个角色可以访问哪个页面:

security:
    access_control:
        - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/trainee, roles: ROLE_TRAINEE }
        - { path: ^/university, roles: ROLE_UNIVERSITY_PROFESSOR }
        - { path: ^/company, roles: ROLE_COMPANY_TUTOR }

现在这些路由只能通过这些 ROLES 访问,而不能通过其他访问。

在这些路线中我有一些表格,我想知道 access_control 是否足以让其他 ROLE 无法到达这些表格?

我在网上看到一些例子,人们在提交表单时输入 isGranted()

if ($form->isValid()) {
    if (!$authorizationChecker->isGranted('ROLE_TRAINEE')) {
        throw new AccessDeniedException();
    }

    // ...
}

但在这里,我不确定他们是在保护这些路由免受 access_control 的影响,还是仅在控制器内部使用 isGranted() 保护这些路由。

有人可以解释一下区别吗,如果我也应该用 isGranted() 保护表单,即使路由受到 access_control 的保护?

拥有访问控制规则就足够了,如果您的表单位于与 access_control 的正则表达式匹配的 uri 后面(您为什么不简单地测试一下...?)