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

时间:2017-02-09 12:11:21

标签: symfony authorization access-control

documentation中,有许多方法可以说明如何管理某些路由的访问控制。

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

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保护?

1 个答案:

答案 0 :(得分:0)

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