0

我不明白为什么匿名用户可以访问我想保护“^/nodes$”和“^/destinations$”的路由。

我哪里错了?我已经仔细阅读了这个资源http://symfony.com/doc/current/book/security.html但无论如何这些网址都可以被匿名查看!

这是我的security.yml:

security:
    encoders:
    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    in_memory:
        memory:
            users:
                user:  { password: athena_user_2014, roles: [ 'ROLE_USER' ] }
                admin: { password: athenaspa2014, roles: [ 'ROLE_ADMIN' ] }

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    secured_area:
        pattern:    ^/backend
        form_login:
            check_path: /backend/login_check
            login_path: /backend/login
            csrf_provider: form.csrf_provider
        logout:
            path:   /backend/logout
            target: /
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
    - { path: ^/nodes, roles: ROLE_ADMIN }
    - { path: ^/destinations, roles: ROLE_ADMIN }
4

1 回答 1

3

您的路径不属于您的任何防火墙模式。您可以进行以下更改以使其正常工作:

firewalls:
    secured_area:
        pattern:   ^/
        ...
access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/backend, role: ROLE_ADMIN }
    - { path: ^/node, role: ROLE_ADMIN }
    ...
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }

最后一条路径就差不多了,有什么用anonymous: true。当没有其他访问控制匹配时,用户不需要登录。如果你想更严格,你可以像第一个路径那样^/login$指定哪些路由需要身份验证。请注意,使用了第一个匹配路线,因此请注意如何订购它们。

或者,您可以添加另一个防火墙。但请记住,每个防火墙都提供单独的登录。

您还可以使用php app/console router-commands 从控制台测试您的路由。如果您不确定如何使用它们,只需键入php app/console help router:match例如

于 2014-06-11T07:25:10.997 回答