【问题标题】:Symfony2.4.2 Restrict access to specific pagesSymfony2.4.2 限制对特定页面的访问
【发布时间】:2017-03-16 00:47:39
【问题描述】:

这是一个使用 symfony 2.4.2 制作的网站,它有一个页面(下载)被限制,你需要一个用户名和密码才能访问它。

问题是,在过去,他们想要不同语言的不同网址,不仅要更改语言环境,还要更改“slug”。

因此,如果您像普通人一样通过单击按钮访问该页面,它会要求您输入用户名和密码,但是,如果您以一种受支持的语言输入 URL,并且使用不同的受支持语言的区域设置,它让您通过,无需询问您的访问权限。

这是我的 routing.yml:

     frontend_descarregues_ca:
         path: /descarregues.html
         defaults: {_controller: FrontendBundle:Default:descarregues, _locale: ca }

    frontend_descarregues_es:
        path: /descargas.html
        defaults: { _controller: FrontendBundle:Default:descarregues, _locale: es }

    frontend_descarregues_fr:
        path: /telechargements.html
        defaults: { _controller: FrontendBundle:Default:descarregues, _locale: fr }

这是我的 security.yml:

    security:
        firewalls:
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
        default:
            pattern:        ^/ca/descarregues.html
            provider:       in_memory
            http_basic: ~
            anonymous:      ~
        default_fr:
            pattern:        ^/fr/telechargements.html
            provider:       in_memory
            http_basic: ~
            anonymous:      ~
        default_es:
            pattern:        ^/es/descargas.html
            provider:       in_memory
            http_basic: ~
            anonymous:      ~

        access_control:
            - { path: ^/ca/descarregues.html, roles: ROLE_DOWN }
            - { path: ^/es/descargas.html, roles: ROLE_DOWN }
            - { path: ^/fr/telechargements.html, roles: ROLE_DOWN }

        providers:
            in_memory:
                memory:
                    users:
                        someuser:
                            password: somepassword
                            roles: 'ROLE_DOWN'

我再说一遍,这是 symfony 2.4.2

我尝试使用要求只允许具有指定“slug”的区域设置有效并进入页面,但这样做碰巧它不会询问我访问权限。

有人知道我该如何解决这个问题吗? (提醒一下,这是 symfony 2.4.2)

【问题讨论】:

    标签: php symfony routing


    【解决方案1】:

    试试这个:

    security:
        firewalls:
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
        default:
            pattern:        ^/[a-zA-Z]+/descarregues.html
            provider:       in_memory
            http_basic: ~
            anonymous:      ~
        default_fr:
            pattern:        ^/[a-zA-Z]+/telechargements.html
            provider:       in_memory
            http_basic: ~
            anonymous:      ~
        default_es:
            pattern:        ^/[a-zA-Z]+/descargas.html
            provider:       in_memory
            http_basic: ~
            anonymous:      ~
    
        access_control:
            - { path: ^/[a-zA-Z]+/descarregues.html, roles: ROLE_DOWN }
            - { path: ^/[a-zA-Z]+/descargas.html, roles: ROLE_DOWN }
            - { path: ^/[a-zA-Z]+/telechargements.html, roles: ROLE_DOWN }
    
        providers:
            in_memory:
                memory:
                    users:
                        someuser:
                            password: somepassword
                            roles: 'ROLE_DOWN'
    

    【讨论】:

    • 就是这样,谢谢。这个问题困扰了我 6 个小时。只是为了完成一点,这要归功于我在防火墙中也使用了这个正则表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2010-11-01
    • 2015-08-08
    相关资源
    最近更新 更多