【问题标题】:Symfony 2 - access_control vs isGranted() to control access in controllerSymfony 2 - access_control vs isGranted() 控制控制器中的访问
【发布时间】:2017-06-27 10:40:53
【问题描述】:

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

【问题讨论】:

    标签: symfony authorization access-control


    【解决方案1】:

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

    【讨论】:

    • 我在想,如果您无法访问此页面,也许可以通过某种方式从平台外部使用 JS 提交表单?或者这是我不应该担心的事情?我不知道如何保护路线。
    • 无论哪种方式发布数据,如果发布到一个端点,在访问控制规则后面,访问控制规则将生效
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 2020-02-16
    • 2012-10-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多