首页 > 解决方案 > 正则表达式:一切,但不是 [字符串]

问题描述

我在 symfony 下工作,我想在安全性方面配置我的模式,以便它适用于除特定路径之外的所有内容。(/家)

我做到了,但它不起作用,我不知道 Regex :

pattern: ^/(?!/accueil).*$

我必须把我所有的链接放在那里,这给出了:

pattern: ^/(admin|profile|package|securiteInformatique|logout)

所以把“all escept”/accueil 更容易

我的security.yml:

   # app/config/security.yml
security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        app:
           id: bes_auth.user_provider

    firewalls:

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

       # public:
        #    pattern: ^accueil
         #   security: false
          #  anonymous: true

        main:
            logout_on_user_change: true
           # pattern: ^/(admin|profile|packages|securiteInformatique|logout)
            #pattern: ^/(?!accueil)

            form_login:
                check_path: fos_user_security_login_check
                login_path: /login_check

            guard:
                authenticators:
                    - app.security.login_form_authenticator
                    - bes_auth.authenticator

                entry_point: Site\PagesBundle\Security\LoginFormAuthenticator

            logout:
                path:   deconnexion #nom de la route de déconnexion
                target: /
                success_handler: bes_auth.authenticator
            anonymous:    true

    access_control:
        - { path: ^/admin, role: ROLE_SUPER_ADMIN }
        - { path: ^/accueil, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, role: ROLE_USER }

标签: phpregexsymfonysymfony-security

解决方案


您应该public完全删除防火墙,patternmain防火墙中删除,并使用access_control来处理权限。

Symfony 从上到下读取以下配置,应用它找到的第一条规则。因此,任何以开头的 URL/accueil都将被您的main防火墙检查,但将允许公众在不登录的情况下查看(因为您拥有anonymous: true)。每个其他 URL(不以 开头/accueil)都需要该ROLE_USER角色,因此将强制进行身份验证。

    access_control:
        - { path: ^/admin, role: ROLE_SUPER_ADMIN }
        - { path: ^/accueil, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, role: ROLE_USER }

推荐阅读